[英]Java invoke subclass and superclass
public class prelim {
public static void main(String[] args) {
A a = new A();
System.out.println(a.x);
System.out.println(a.m());
B b = new B();
System.out.println(b.x);
System.out.println(b.m());
a = new B();
System.out.println(a.x);
System.out.println(a.m());
b = (B)a;
System.out.println(b.x);
System.out.println(b.m());
}
}
class A {
int x;
A() {
this(1);
}
A(int x) {
this.x = x;
}
int m() {
return x;
}
}
class B extends A {
int x;
B() {
this(2);
}
B(int x) {
super(x+1);
this.x = super.x + 1;
}
int m() {
return x;
}
}
至於 a = new B(); b = (B)a; a 和 b 的類型是什么,因為它沒有被聲明。 並且輸出是 3 4 4 4。我認為 a 是類型 B。所以 ax 和 am() 應該是 4 4。
我不確切知道調用子類及其方法的過程。
變量“a”的類型為 A,這就是它聲明的類型。 變量的類型永遠不會改變。 Java 中的變量是引用。 類型 A 的變量可以指向類型 A 的對象或其子類之一(或null )。
同樣,變量“b”的類型為 B。它只能指向類型為 B 或null的對象,因為 B 沒有子類。
正確的打印輸出(為簡潔起見刪除換行符)是:
1 1 4 4 3 4 4 4
四種打印輸出的對象類型是
A B B B
在第三個打印輸出中,ax 訪問 A 類的“x”變量,該變量存在,即使對象具有類 B。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.