8

継承でプライベートメソッドを使用することについて混乱しています。たとえば、次のようになります。

public class A {
    private void say(int number){
        System.out.print("A:"+number);

    }
}

public class B extends A{
    public void say(int number){
        System.out.print("Over:"+number);
    }
}

public class Tester {
    public static void main(String[] args) {

        A a=new B();
        a.say(12);

    }
}

上記のコードに基づいて、プライベート メソッドの継承について混乱しています。プライベート メソッドは からclass Aに継承されBますか? または、両方のクラスの say メソッドはまったく無関係ですか? class Bmain() メソッドで実行するとコードにエラーが発生するため、 からプライベート メソッドを呼び出すことができないようclass Aです。

4

6 に答える 6

20

残しておく必要があるスーパークラス メソッドにサブクラスがアクセスできるようにするprivate場合protectedは、探しているキーワードです。

  • Privateメンバーを含むクラスのみがそのメンバーにアクセスできるようにします。
  • Protectedクラスとそのすべてのサブクラス内でメンバーにアクセスできるようにします。
  • Public誰でもメンバーにアクセスできます。
于 2013-10-19T03:01:33.490 に答える
2

ここでは 2 つのことが行われています。

まず、参照の型とオブジェクトの型の違いに注意してください。

あなたが言う時

A a = 新しい B();

参照aの型Aは ですが、オブジェクトの型はBです。したがって、 を呼び出すと、 API/インターフェース/パースペクティブからa.say(12);見ています。BA

第 2 にB、視点から見ているため、というパブリック メソッドがないAため、エラーが発生します。もちろんそうですが、として扱っていることを忘れないでください。これを行うと、知らないメソッドを参照する機能が失われます (後でキャストしない限り、今は心配する必要はありません) 。Asay()BBABA

結局、そもそもそれを見ることができず、誰でもアクセスできるパブリックメソッドがないため、B実際には継承するsay()ことはありません。AAsay()

本当に楽しみたい場合は、say()protected inAと private inBを作成して、何が起こるか見てみましょう。

于 2013-10-19T03:14:49.843 に答える
1

エラーが発生する理由say(int)は、プライベートであるためです。これは継承とは関係ありません。プライベート メンバー メソッドは、その定義クラスでのみ呼び出すことができます。

継承の質問に答えるにB.say()は、A.say()のメソッドです。派生クラスはその基本クラスからプライベート メソッドを継承できないため、メソッドをオーバーライドすることさえありません。メソッド/変数のみが継承protectedおよび/またはオーバーライドできます。public

于 2013-10-19T03:00:07.873 に答える
0

プライベートとは、そのクラスでのみアクセスでき、他の場所ではアクセスできないことを意味します。

于 2013-10-19T03:00:13.420 に答える
0

サブクラスは、そのスーパークラスからメソッド (スーパークラスが同じパッケージ内にある場合は、アクセス修飾子のないメソッド)のみを呼び出しまたはオーバーライドできますprotected。メソッドは宣言されたクラスにとどまり、他のクラスからは見えません。publicprivate

于 2013-10-19T03:00:36.360 に答える
-1

プライベート メソッドはサブクラスで継承されます。つまり、プライベート メソッドは子クラスで使用できますが、子クラスからはアクセスできません。これは、可用性とアクセシビリティの概念を覚えておく必要があるためです。

于 2020-08-30T09:43:46.377 に答える