1. 程式人生 > 其它 >java 繼承 兩同兩小一大,方法返回值小的理解

java 繼承 兩同兩小一大,方法返回值小的理解

技術標籤:java基礎java

原始碼如下:

package test;
public class Test {
    public static void main(String[] args){
        // 多型
        B a = new A();

        // 這樣會報錯,因為 D 沒有該方法
        // System.out.println(a.test().a());
        System.out.println(a.test().testValue);
    }
}

class A extends B{
    @Override
    public
C test(){ System.out.println("呼叫 A 的 test() 方法"); return new C(); } } class B{ public D test(){ System.out.println("呼叫 B 的 test() 方法"); return new D(); } } class C extends D { public int testValue = 10000; public void a(){} } class
D { public int testValue = 12345; }

執行結果:

在這裡插入圖片描述
總結:
看上面的結果可以知道,系統內部實際上是做了一個向上轉型的操作。如果子類返回值的範圍 比 父類的 要大的話,例如 子類重寫的方法的返回值為Number,父類為 Integer。此時,系統需要做的是向下轉型,很有可能會轉型失敗。因此子類的方法的返回值型別應該 和 父類的 相等或更小