Java實現子類返回型別不一樣也能重寫(特殊情況)

hys__handsome發表於2020-11-07

由於子類和父類型別不完全一致,但是子類可以轉換成父類的型別,父類 不可以 轉換成子類的型別。

package com.cs;
public class Test01 {
	int a=6;
}
package com.cs;
public class Test02 extends Test01{
	int b=5;
}
package com.cs;

public class Test04 {
	int a;
	public Test01 ss() { 
		System.out.println("無重寫,過載");
		return new Test01();
	}
}
package com.cs;
//Test01為Test02的父類
//Test04為Test03的父類
public class Test03 extends Test04 {
	int b;
	public Test02 ss() {
		System.out.println("重寫,無過載");
		return new Test02();
	}
}
package com.cs;

public class demo {
	public static void main(String[] args) {
		//Test01為Test02的父類
		//Test04為Test03的父類
		Test04 t = new Test03();
		Test01 t1=t.ss();
		
	}
}

輸出:重寫,無過載

父類Test04裡面方法返回的Test02(子) ,
子類Test03返回Test01(父)的話就會出錯。
在這裡插入圖片描述

如果在Test03返回型別除了“類”不同以外的不同(如 int void float等)也會出錯,要求你修改相同。
結論:只要子類方法名和引數列表與父類一樣的話就預設你是要在子類重寫父類的方法。然後再去判斷返回型別是否一致(類特殊:子類方法返回的型別是父類方法返回型別的子類算成一致)。

相關文章