1
class A {
    void test() {
    }
}

class B extends A {
    void test() {
    }

 public static void main(String[] args)
{
 B b=new B();
//insert code here
}
}

testクラスBのオブジェクトbのクラスAのメソッドを呼び出すにはどうすればよいですか?特にオブジェクトbの場合

4

3 に答える 3

14

Bの外部から呼び出すことはできませんが、Bの内部では次のように呼び出すことができます。

super.test();

test()これは、B内の任意のコードから実行できます。メソッド自体に含まれている必要はありません。したがって、たとえば:

public void foo() {
    // Call the superclass implementation directly - no logging
    super.test();
}

@Override void test() {
    System.out.println("About to call super.test()");
    super.test();
    System.out.println("Call to super.test() complete");
}

メソッドをオーバーライドすることを実際に意味し@Overrideことをコンパイラーに通知するアノテーションに注意してください。(他のことは別として、メソッド名にタイプミスがある場合、これはそれをすばやく見つけるのに役立ちます。)

Bの外部から呼び出すことができない理由は、Bがメソッドをオーバーライドするためです...オーバーライドの目的は、元の動作を置き換えることです。たとえば、パラメータを持つメソッドでは、Bは、スーパークラスの実装を呼び出すか、他のことを行う前に、パラメータを使って何かを実行したい場合があります(独自のルールに従って検証します)。外部コードがAのバージョンを呼び出すことができれば、それはBの期待(およびカプセル化)に違反します。

于 2013-03-26T07:06:15.907 に答える
0

クラス自体はエラーです。クラス名を定義するときに括弧を追加しないでください。オブジェクト型キャストを使用するか、クラスBsuper.test()のメソッドで呼び出すことができますtest

class A
 {
 test()
 {}
 }

   class B extends A
  {
  test()
  {
   super.test()   // calls the test() method of base class
   }
   }


  B b=new B();
于 2013-03-26T07:09:41.873 に答える
0

これは、派生クラスオブジェクトを使用して基本クラスメソッドを呼び出すために使用できます。

b.super.test()

于 2013-03-26T07:17:11.100 に答える