このクラスがあるとします:
class B extends A
{
@Override
void foo () { ... }
}
クラス B のオブジェクトが与えられた場合、クラス A から明示的に foo メソッドを呼び出すことができますか? オブジェクトをダウンキャストしてみました。つまり、
B b = new B();
((A)b).foo();
しかし、それはうまくいかないようです。
Javaでやりたいことを達成する方法はありますか?
このクラスがあるとします:
class B extends A
{
@Override
void foo () { ... }
}
クラス B のオブジェクトが与えられた場合、クラス A から明示的に foo メソッドを呼び出すことができますか? オブジェクトをダウンキャストしてみました。つまり、
B b = new B();
((A)b).foo();
しかし、それはうまくいかないようです。
Javaでやりたいことを達成する方法はありますか?
Java では、デフォルトですべての関数/メソッドが仮想です。したがって、継承のシナリオでは、サブタイプのメソッド呼び出しは、参照タイプがスーパータイプ/サブタイプであるかどうかに関係なく、常にサブタイプのそのメソッドのバージョンを呼び出します。
A a = new B();
a.foo();
B b = new B();
b.foo()
foo()
both はin B
onlyのバージョンを呼び出します。
関数を明示的に仮想宣言する必要がある C++ から来た人で、この種の動作がポインターでのみ観察される場合、Java での同じ動作を別の方法で理解する必要があります。
こんな感じです.....
-呼び出されるforの最も具体的なバージョン。method
class
例えば:
public class A{
public void go(){
System.out.println("A");
}
}
class B extends A{
public static void main(String[] args){
B b = new B();
b.go();
}
}
上記class B
では、メソッドgo()
がNot overriddenであるため、メソッド fromclass A
が呼び出されます。
以下のような場合、class B
メソッドgo()
が呼び出されます。
クラス B は A を拡張します {
public void go(){
System.out.println("B");
}
public static void main(String[] args){
B b = new B();
b.go();
}
}
上記のクラス " The Most specific version of go() method is called
"で