class A2 {
int numt=111;
void hello() {
System.out.println("Hello from A2");
}
}
class B2 extends A2 {
void hello() {
System.out.println("Hello from B2");
}
}
class C2 extends B2 {
int numt=666;
void hello() {
System.out.println("Hello from C2");
}
}
class MethodOverriding2 {
public static void main(String args[]) {
A2 obj = new C2();
obj.hello();
System.out.println("Num is : " + obj.numt);
}
}
つまり、基本的にここでの出力は
Hello from C2
Num is : 111
C2からhello()を実行するのに、A2からnumtを実行するのはなぜですか?
私が理解しているように、私はA2をB2に継承し、C2をB2に継承しています。次に、メインで、C2を参照するクラスA2のオブジェクトを作成しています(A2はC2のスーパークラスであるため、これを実行できます)。その後、コンパイル時にコードが満たされるため、エラーは発生しません。実行時に、プログラムは「hello()」を探します。ここで、「obj」は、定義されている場所ではなく、参照しています。ただし、「numt」の場合は逆になります。なんでそうなの?そして、私の上記の理解は正しいですか?そうでない場合は修正してください。
どうもありがとう!私はそれが初心者の質問であることを知っています、私はOOPに非常に新しいです。