ダイナミックメソッドバインディングスーパークラスリファレンスは、それによって継承され、オーバーロードされるサブクラスメソッドのみを呼び出すことができます。しかし、そうでなければ実装することができます。ここスーパークラスオブジェクトは、継承されていないサブクラスメンバメソッドを参照することは可能ですか?
abstract class in
{
abstract void print();
}
class a extends in
{
String name=this.getClass().getSimpleName();
void show()
{
System.out.println("class "+name);
}
void print()
{
show();
}
}
class Main
{
public static void main(String args[])
{
in x;
x = new a();
x.print();
}
}
、このがでスーパークラスのオブジェクトを指すとして代わりスーパー名のサブクラス名を返す正常
クラス
またのgetClass()を印刷します主な方法。
親は子供について知ることができません。クラスの開発者は、そのクラスがユーザーによってどのように拡張されるかを知ることができません。 – duffymo
すべての 'in'は、' print() 'と呼ばれるメソッドを持つべきであることを知っています。そのメソッドのすべての実装は 'a'の内部で行われています。これは' a'(すべてのクラス名と他のメソッドまで)を知っています。 – khelwood
x.print()はnew a()と同等です。print()?しかし、xはスーパークラスのリファレンスではありませんか? – ZEU5