は私がスーパークラスを持っている:Javaのオーバーライドメソッド呼び出し
public class SuperClass {
public void dosomething() {
firstMethod();
secondMethod();
}
public void firstMethod() {
System.out.println("Super first method");
}
public void secondMethod() {
System.out.println("Super second method");
}
}
サブクラス:
public class SubClass extends SuperClass {
public void dosomething() {
super.dosomething();
}
public void firstMethod() {
System.out.println("Sub first method");
}
public void secondMethod() {
System.out.println("Sub second method");
}
}
テストクラス:
public static void main(String[] args) {
SubClass sub = new SubClass();
sub.dosomething();
SuperClass sup = new SuperClass();
sup.dosomething()
}
私はテストメソッドを実行
、I得られた:Sub first method
Sub second method
これがどう起こったか教えていただけますか?サブクラスdosomething
のメソッドではsuper.dosomething()
を呼び出しました。スーパーメソッドが呼び出されると思いますが、サブクラスのオーバーライドメソッドが呼び出されました。
私はこれを行う場合:
SuperClass superClass = new SuperClass();
superClass.dosomething();
を結果は次のとおりです。
スーパー最初の方法
スーパー第二の方法
違いは、メソッド呼び出しの場所です。このような
...
おっとスーパーリファレンスが最初の例でサブクラス化する指さ::!私は私が知っている `tを何か)がなければならないと思います
SuperClass sub = new SubClass();
sub.firstMethod();
sub.secondMethod();
この機能は非常に便利だと思いますが、それはどのように詳細に動作するのか分かりません:( – Felix
@Felix:あなたはそれについて理解していますか?変数が定義された型ではなく、重要なオブジェクトの実行時の型です。 –