0

例:

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

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

違法ですが、可視性を切り替えれば合法です。このように設計されている理由は何ですか?あまり意味がわかりません。

4

2 に答える 2

1

これは、誰かが「親」オブジェクトを使用して「子」オブジェクトのインスタンスを参照している可能性があり、可視性を下げると継承の「コントラクト」が壊れるためです。

およびへのパブリック メソッドを持つ「Animal」を拡張するクラス「Cat」があったbreathe()としeat()ます。

'Cat' クラスがbreathe()非公開にされた場合、あなたの猫を参照する Animal を持つ誰かがその猫を呼び出すことができなくなりますbreathe()(Java で不幸な猫を持つことはできません!)

于 2013-02-21T21:04:01.130 に答える
0

親クラスのインスタンスを取得すると、そのすべてのパブリック メソッドに到達できるはずです。それは契約の一部です。

Child クラスには、parent と比較して「is a」プロパティがあるため、少なくとも Parent ができることを実行できます。

例えば:

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 . 
于 2013-02-21T21:03:14.947 に答える