0

疑問がありました。たとえば、メソッドを実装するクラス A があるとします。

 private void methodA(int index) throws Exception, Error {

 }

そして、最初のクラス A を拡張するクラス B があるとします。私の質問は、クラス B を実装できるかどうかです。

 private void methodA(int index) throws Exception, Error {
 }

そして、どのメソッドがどの状況で呼び出されるのか!!

ありがとう

4

4 に答える 4

1

メソッドが「プライベート」と宣言されていない場合、これは単なる標準的なポリモーフィズムになります。非公開なので、ルールが少し異なります。クラス A のバージョンは、クラス A のコードからのみ呼び出すことができます。クラス B のバージョンは、クラス B で実際に記述されたコードからのみ呼び出すことができます(クラス A を拡張してクラス B が取得するコードとは対照的です)。

于 2013-10-08T23:12:52.243 に答える
1

YES 、クラス Bでメソッドを実装できmethodAますが、オーバーライドしていないことに注意してください。

あなたのメソッドは広告として宣言されているprivateので、クラスを拡張することから「見えません」。

メソッドをオーバーライド可能にすることが意図されている場合は、それを として宣言する必要がありますpublic

于 2013-10-09T08:38:58.640 に答える
0

試してみてください:)

public class Main {
    public static void main(String[] args) {
        Base base;
        base = new A();
        System.out.println(base.doSth());

        base = new B();
        System.out.println(base.doSth());
    }
}

abstract class Base {
    public abstract String doSth();
}

class A extends Base {
    @Override
    public String doSth() {
        return "A";
    }
}

class B extends A {
    @Override
    public String doSth() {
        return "B";
    }
}
于 2013-10-08T23:27:33.563 に答える
-1

スーパークラスのメソッドをオーバーライドするつもりはないと思いますが、これを行うには、サブクラスのメソッドがスーパークラスのメソッドと同じシグネチャを持っている必要があります。

これらのメソッドは、次の方法で呼び出すことができます。

  • test1が のインスタンスであると仮定するとclassAteste1.methodA(index)スーパークラスで実装が実行されます。

  • test2が のインスタンスでclassBあると仮定するとtest2.methodA(index)、サブクラス メソッドが実行されます。

  • では、次のようなclassBスーパー クラス メソッドを呼び出すことができます (メソッドが でない場合private)。

    public class ClassB extends ClassA
    {
        ...
        super.methodA(index);
        ...
    }
    
于 2013-10-08T23:31:37.923 に答える