簡體   English   中英

Java 新手:超類和子類

[英]New to Java: SuperClass and SubClass

我對 Java 相當陌生,我正在學習繼承。 我正在嘗試在超類 Rec1 下創建一個名為 BetterRectangle 的子類。

Rec 1 獲取 x 和 y 坐標(位置),還獲取矩形的寬度和高度(大小)。 BetterRectangle 計算矩形的周長和面積。

我在 main 方法中遇到錯誤。 它找不到任何符號(即找不到 rec1.getHeight(20) 符號)。

public class Rec1 {
    private double x;
    private double y;
    private double width;
    private double height;

    public void setLocation(double xCord, double yCord) {
        x = xCord;
        y = yCord;
    }

    public void setSize(double h, double w) {
        height = h;
        width = w;
    }

    public double getHeight(double h) {
        return height;
    }

    public double getWidth(double w) {
        return width;
    }
}

public class BetterRectangle extends Rectangle {
    public BetterRectangle(int x, int y, int width, int height) {

        super(x, y, width, height);
        super.setLocation(x, y);
        super.setSize(width, height);
    }

    public double calcPerimeter() {
        return super.getHeight() * 2 + super.getWidth() * 2;
    }

    public double calcArea() {
        return super.getHeight() * super.getWidth();
    }
}

BetterRectangle 類正在擴展示例代碼中的 Rectangle。 所以這里 BetterRectangle 將是子級,而 Rectangle 將是父級。 現在 BetterRectangle 使用 super 關鍵字來訪問 getHeight、getWidth 等...函數。 因為這些函數在 Rectangle 類中不存在,所以它給出了編譯錯誤。

不是擴展 Rectangle 類,而是在 BetterRectangle 中擴展 Rec1 類,然后運行主類 Rectangle。 這應該有效。

仔細看這里

   Rectangle BetterRectangle = new Rectangle();
   Rectangle Rec1 = new Rectangle(); 

您正在聲明 Rectangle 類型的變量而不是您自己的類。 我看不到您的導入語句,但您可能正在創建 java.awt.rectangle 類型。 您正在混淆變量類型和變量名稱。 創建您自己的類的實例時,它應該如下所示:

Rec1 mySimpleRec = new Rec1();
BetterRectangle myBetterRec = new BetterRectangle()

在聲明事物時,將它們按“Type variableName = new Type()”或“Class variableName = new Class()”的順序排列。

仔細看:

Rectangle Rec1 = new Rectangle(); 

Rec1.getHeight(20); 

Rec1的類型是Rectangle 但是Rectangle類沒有getHeight方法。 也許你想要這個:

Rec1 rec1 = new Rectangle(); 

rec1.getHeight(20); 

請注意,我將變量重命名為rec1 ,並更改了其類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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