簡體   English   中英

Java調用子類和超類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM