ここで動作しているJavaコード
class Cup {
public String sayColor() {
return "i have a color .";
}
}
class TCup extends Cup{
public String sayColor(){
System.out.println(super.getClass().getName());
return super.sayColor()+"color is tee green.";
}
}
class MyTCup extends TCup {
public String sayColor(){
System.out.println(super.getClass().getName());
return super.sayColor()+"but brushed to red now!";
}
}
class Test {
public static void main(String[] args) {
Cup c = new MyTCup();
System.out.print(c.sayColor());
}
}
Testクラスの印刷を実行します
MyTCup
MyTCup
i have a color .color is tee green.but brushed to red now!
質問1:実行時のオブジェクトCのタイプはMyTCupですが、常にスーパーメソッドを呼び出すことができます。オブジェクトを初期化した後、MyTCup内のメモリにメソッドスタックがあり、実行時にコードのように呼び出すことができますか?
質問2:他のオブジェクトでスーパーメソッドを呼び出す方法はありません。私が知っているように、c++はいつでも親メソッドを呼び出すためにキャストできます。なぜJavaと違うのですか?