程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 轉型-關於如何通過子類調用父類的父類中的方法

轉型-關於如何通過子類調用父類的父類中的方法

編輯:編程綜合問答
關於如何通過子類調用父類的父類中的方法

package access;
class A{
public A(){System.out.println("A created!");}
public int f(){
System.out.println("call A.f()");
return 1;
}
}
class B extends A{
public int f(){
System.out.println("call B.f()");
return 2;
}
public B(){System.out.println("B created!");}
}
class C extends B{
public int f(){
System.out.println("call C.f()");
return 3;
}
}
public class Test01{
public static void main(String args[]){
C c = new C();
System.out.println(((A)c).f());
}
}
將c轉型成A,試圖調用A中的f(),結果沒有如我所願,為什麼呢?

最佳回答:


首先在子類中調用被重寫的父類方法,這個想法就非常怪,既然被重寫了肯定是想調用重寫後的想法,如果真的還想調用父類被重寫的方法,最直接的還是:
A a = new A();
System.out.println(a.f());
就ok。
(A(c)).f();這裡你只是把c的類型強制轉換成了它的父類,但c本身是重寫了f()方法的,你再轉換它類型也是沒用的,C只會調用它自己的f()方法。具體super關鍵字一般在構造函數裡面用調用父類的構造函數,所以這裡壓根就不起作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved