1. ホーム
  2. java

[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。

2022-02-24 01:21:25

質問

このようなコンパイラーエラーが発生しました。

継承したメソッドの可視性を下げることはできません。

私は以下のコードを持っています。

class Parent {      
    public void func() {
        System.out.println("in Parent");
    }
}

public class TestClass extends Parent {    
    public static void main(String args[]) {
        parent obj=new TestClass();
        obj.addTest();
    } 

    private void func() {
        System.out.println("in child");         
    }
}

ここで親クラスは func() メソッドはパブリックであり、サブクラスによってオーバーライドされます。 TestClass であり、プライベートである。現在、コンパイラは、私は可視性を減らすことができないというエラーをスローします。技術的なことを言うと、私が TestClass は親オブジェクトの型に割り当てられているので func() メソッドがオーバーライドされているので、TestClass の func() は常に呼び出されることになります。誰かが私を明確に説明することができますか?

解決方法は?

これは、サブクラスが private に対して void func() メソッドがありますが、スーパークラスには可視性 public .

もしあなたのコードがコンパイル可能であったとしても、こんなことをしたら実行時に爆発してしまうでしょう。

parent p = new TestClass();
p.func(); // boom - func is public in parent, but TestClass's impl is private, so no access would be allowed

これを修正するために、サブクラスの func メソッド public :

public class TestClass extends parent {
    ...
    public void func() { // give it public visibility
        System.out.println("in child");         
    }
}


また、標準的な命名規則を使用してください。 クラスは大文字で始める必要があります。 - すなわち Parent ではなく parent