Java新手:SuperClass和SubClass

时间:2015-10-23 17:58:21

标签: java inheritance

我对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();
    }
}

3 个答案:

答案 0 :(得分:0)

类BetterRectangle正在示例代码中扩展Rectangle。所以这里BetterRectangle将是child,而Rectangle将是parent。现在BetterRectangle使用super关键字来访问getHeight,getWidth等...函数。由于这些函数在Rectangle类中不存在,因此它给出了编译错误。

而不是扩展Rectangle类,在BetterRectangle中扩展Rec1类,然后运行主类Rectangle。这应该有用。

答案 1 :(得分:0)

仔细看这里

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

您声明的是Rectangle类型的变量而不是您自己的类。我看不到你的import语句,但你可能会创建java.awt.rectangle的类型。您正在混合变量类型和变量名称。在创建自己的类的实例时,它应如下所示:

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

当声明事物按此顺序放置时“输入variableName = new Type()”或“Class variableName = new Class()”。

答案 2 :(得分:0)

仔细观察:

Rectangle Rec1 = new Rectangle(); 

Rec1.getHeight(20); 

Rec1的类型为Rectangle。但是Rectangle类没有getHeight方法。也许你想要这个:

Rec1 rec1 = new Rectangle(); 

rec1.getHeight(20); 

请注意,我将变量重命名为rec1,并更改了其类型。