2017-06-03 80 views
-3

假設你有如何通過我的父引用變量訪問子類中的方法?

public class A{ 
    public void a_parent(){ 
    System.out.println("Parent class invoked:"); 
    } 
} 

爲你的主類和其他4類繼承該類

public class A1 extends A{ 
    public void a1(){ 
     System.out.println("a1 class invoked:"); 
    } 

}

public class A2 extends A{ 
    public void a2(){ 
     System.out.println("a2 class invoked:"); 
    } 

}

public class A3 extends A{ 
    public void a3(){ 
     System.out.println("a3 class invoked:"); 
    } 

}

public class A4 extends A{ 
    public void a4(){ 
     System.out.println("a4 class invoked:"); 
    } 
} 

在主要方法中,我這樣稱呼他們。

public class TestClasses{ 
    public static void main(String args[]){ 
    A a; 
     a = new A1(); 
     a = new A2(); 
     a = new A3(); 
     a = new A4(); 

System.out.println(a.a2()); 
    } 
} 

當我嘗試調用a2方法時,我不能。我只能訪問a4和a_parent方法。

有人可以幫忙嗎?

+1

你想讓變量'a'記住它以前的值嗎? 'a'的值爲'new A4();',它與'A2'完全無關。我懷疑你甚至可以訪問'a4',因爲'a'是類型'A',它沒有這個名字的方法。 – luk2302

回答

1

首先,在你分配a = new A2();後,你做a = new A3(),所以a甚至不再是A2的實例。其次,a可以是A的任何實例,它不知道在那時它將是A2。因此,你應該檢查並做了轉換:

if(a instanceof A2){ 
    A2 a2 = (A2) a; 
    System.out.println(a2.a2()); 
} 

在你的代碼,這將不會做任何事情,因爲實際上不是A2的實例,但我希望你明白我的意思。

相關問題