多型中的返回值型別

你的镁偷走了我的锌發表於2024-09-26

在之前我們學習過的返回值型別有兩大類:
1.基本資料型別:byte,short,int,long,float,double,char,boolean
2.引用資料型別:類(String也屬於類),陣列,介面
當返回值是一個基本資料型別的時候,我們返回的是一個具體的值或者變數,或者是布林值
我們這裡不講基本資料型別的返回值
如果一個方法中定義的是一個引用資料型別的時候返回的是一個該類的物件或者是該類的子類物件
1.當一個普通的類作為一個方法的返回值型別時:返回值要是一個類的物件名

class Student{
    public void fu(){
        System.out.println("好好學習,天天向上");
    }
}

class StudentDemo1 {
    public Student funzi(){  //用父類類名作為返回值型別,其返回的值必須是一個物件,這裡返回的是一個父類的物件
        return new Student();
    }
}

public class Demo2 {
    public static void main(String[] args) {
        new StudentDemo1().funzi().fu(); //定義一個類物件呼叫其中的方法,並且返回一個父類物件再進行呼叫父類的方法

    }
}

2.當一個抽象類名作為一個返回值型別的時:返回值要是一個父類的子類物件

//將一個抽象類名作為返回值型別
abstract class Student2{
    public abstract void fu1();
}
class StudentZi extends Student2{
    public void fu1(){
        System.out.println("我想成為一個富翁");
    }
}
class StudentDemo2{
    public Student2 funzi1(){
        return new StudentZi();
    }
}
public class Demo2 {
    public static void main(String[] args) {
        new StudentDemo2().funzi1().fu1(); //定義一個類物件(該類中有一個方法是以抽象類名為返回值型別的),
        // 呼叫該類裡面的方法,並返回一個子類(該子類是具體繼承了抽象類的子類)的物件,再呼叫返回物件中的方法,最後輸出為:我想成為一個富翁
    }
}

3.當一個介面類名作為返回值型別的時候:返回值要是一個實現介面的具體類的物件

//定義一個介面,將介面名當做一個方法的返回值型別,這時候返回的值為該介面具體實現的類的物件

interface Inter1{
    public abstract void fun2();
}
class Student3 implements Inter1{
    public void fun2(){
        System.out.println("我想成為億萬富翁");
    }
}

class StudentDemo3{
    public Inter1 show(){
        return new Student3();
    }
}

public class Demo2 {
    public static void main(String[] args) {
        new StudentDemo3().show().fun2(); //定義一個類物件(該類中有一個方法是以介面名為返回值型別的),
        // 呼叫該類裡面的方法,並返回一個子類的物件(該類是具體實現了介面的類),再呼叫該具體實現類中的方法
    }
}

相關文章