2014-10-30 109 views
-5
class A{ 
    public void m1(){} 
    public void m2(){} 
} 

class B{ 
    public void m3(){} 
    public void m1(){} 

    public static void main(String args[]){ 
     A a=new B(); 
     a.m1(); 

     //Why we have access to A class methods only. 
     // Why overriding methods cannot be more restrictive 
    } 
} 
+0

'A'沒有字段,它通常被認爲是糟糕的設計,允許訪問類字段。你可以通過使'final'類或'final'類方法來限制擴展...... – MadProgrammer 2014-10-30 05:29:43

+0

這個問題似乎是無關緊要的,因爲它顯然是一個作業複製粘貼,沒有OP的努力。 – JamesENL 2014-10-30 05:29:57

+0

B類是否延伸A類? – codeMan 2014-10-30 05:35:45

回答

0

B「是A」A,所以你可以將B傳遞給像doSomethingToA(A a)這樣的方法。該方法正確地期望能夠看到m1m2

您只能訪問A方法,因爲a的類型爲A - 它可能是A而不是B,因此您只能調用變量類公開的方法。你coulkd改變主要是B a=new B();,現在你可以調用B方法。

0

一個被定義爲類型A,因此a.m1(),使用來自A.

方法M1()可以延伸A和B,然後代碼將調用M1從B.

0

當您擴展一個類或實現一個接口時,覆蓋是可能的。 即,當我們談論接口和繼承時,重寫可以適用。
在你的代碼中,你正在重新定義不重寫的方法。

只有繼承的方法可能會被覆蓋,並且記住私有方法不會被繼承。

相關問題