プリントアウトがある:フルーツ アップル ゴールデン 私はオブジェクトc.make()
がclass Golden
でメソッドを呼び出しますなぜ私はcが対象であることを考える代わりにclass Apple
.Becauseのかを知りたいJavaの意気消沈したオブジェクトを呼び出すサブ方法
ゴールデンクラスのApple、私の間違いはどこですか?ご検討いただきありがとうございます。
public class Fruit {
public Fruit(){
System.out.println("Fruit");
}
public void make(){
System.out.println("Fruit");
}
}
class Apple extends Fruit{
public Apple(){
System.out.println("Apple");
}
public void make(){
System.out.println("Apple");
}
}
class Golden extends Apple{
public Golden(){
System.out.println("Golden");
}
public void make(){
System.out.println("Golden");
}
}
public class tet {
public static void main(String[] args){
Fruit b = new Golden();//Fruit Apple Golden
Apple c = (Apple)b;
c.make();
}
}
それを 'Apple'にキャストしても、まだ' Golden'型のオブジェクトであり、 'make'メソッドがオーバーライドされているので、' Golden'クラスのものが呼び出されます。 – BackSlash
(Apple)bが表示されたら、スタックとヒープはどうなりますか?ヒープを指すbの方向を含め、何も起こりませんか? –
非常にシンプルにする**ルール1 ** 'new'演算子を使用するクラスのヒープ' object'が作成されます。 **ルール2 ** 'new'を使用したクラスの参照と、そのクラスの上位階層のすべての' class and interfaces'は、作成されたObjectのみを参照することができます。 *注*猫の犬の参照は無効です。動物の犬の参照は、犬の吠える能力を取り除くものではありません。 :) –