-3
class a{
  public void foo(int a){
     System.out.println("super");
  }
}
class b extends a{
  public void foo(int a){
     System.out.println("sub");
  }
}

そして、これは私がそれを呼び出すために私のコードを書いた方法です

a ob = new b(); 
ob.foo(7);

しかし、それはサブクラスメソッドを呼び出しますか?

4

1 に答える 1

5

...しかし、サブクラスメソッドを呼び出します

それがオーバーライドの全体的なポイントです...そのため、インスタンスのサブクラスでメソッドを呼び出すと、メソッドのサブクラスのオーバーライドが取得されます!

一方、サブクラス自体は、そのスーパークラスでメソッドのオーバーライドされたバージョンを呼び出すことができます。

class A {
    public void foo() {
        System.out.println("super");
    }
}

class B extends A {
    public void foo() {
        super.foo();  // call the overridden method
        System.out.println("sub");
    }
}

...印刷されます

super
sub

fooインスタンスを呼び出すB場合。


この問題を回避する方法が他にないと本当に確信していますか?

  1. はい
  2. それを「問題」と考える理由がわかりません。
于 2012-06-17T03:45:46.970 に答える