Derived Class
あなたが説明していることは、参照時にメソッドを呼び出したいように思えBase class
ます..
しかし、そのためには、メソッドも自分で持つ必要がありますbase class
..したがって、基本クラスでも
メソッドを宣言する必要があります..実装を提供したくない場合は、抽象化するか、抽象化します空のメソッド..それは問題ではありません..do()
A
さて、あなたが説明しているのと同じことをすれば..タイプキャストをする必要はありません..
Derived Class
に基づいて適切なメソッドが呼び出されるため、 -which derived class object does your base class reference point to
public abstract class A {
public abstract void do();
}
public class B extends A {
public void do() {
System.out.println("In B");
}
}
public class Test {
public static void main(String[] args) {
A obj = returnA();
obj.do(); // Will invoke class B's do() method
}
/** Method returning BaseClass A's reference pointing to subclass instance **/
public static A returnA() {
A obj = new B();
return obj;
}
}
わかりました、あなたの編集を見たところ、クラスを変更することはできません..
typecast
その場合、返された参照のインスタンスに基づいて実際に実行する必要があります。
したがって、main
上記の方法では、A obj = returnA();
この行の後に次の行を追加します。
if (obj instanceof B) {
B obj1 = (B) obj;
}
ただし、この場合、instanceof
各サブクラスをチェックする必要があります..それは大きな問題になる可能性があります..