2013-02-21 49 views
0

例子:爲什麼Java不允許減少父方法的可見性,但允許增加它們?

class Parent { 
    public void func(){ 
     System.err.println("parnet"); 
    } 
} 

class Child extends Parent { 
    @Override 
    protected void func(){ 
     System.err.println("child"); 
    } 
} 

是非法的,但如果我們切換能見度它是合法的。這是什麼原因設計的?我無法理解它。

+0

這以及 - http://stackoverflow.com/q/9035052/2030471 – 2013-02-21 21:02:00

回答

0

如果你得到一個父類的實例,你應該能夠達到它的所有公共方法。這是合同的一部分。

與父類相比,Child類具有「是」屬性,因此它至少可以執行父級可以執行的操作。

例如:

List<Parent> parents=new List<Parent>(); 
parents.add(new Child()); 
... 
parents.get(0).func(); // you should always be able to call it , since it's a Parent instance . 
1

這是因爲有人可以用一個「父」對象指的是「兒童」對象的實例,並降低能見度會打破繼承「契約」。

想象一下,如果您有一個類'Cat',它擴展了'Animal',其中公開的方法爲breathe()eat()

現在,如果你的「貓」類所做的breathe()私有,然後有人說有一個動物引用你的貓在貓不能打電話breathe()(我們不能有不開心的貓在Java中!)