【问题标题】:I am trying to initialise a Base Class property in a Sub Class but I am getting an error我正在尝试初始化子类中的基类属性,但出现错误
【发布时间】:2021-05-28 16:48:29
【问题描述】:

我试图让这个子类 Circle 继承父类 Shapes 的特征。我希望 Circle 类接受颜色字符串,但我不断收到错误消息。

class Circle extends Shapes {
    private int radius;
    public Circle(int radius, String Colour) {
        this.radius = radius;
        this.colour = Colour;
    }
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

我得到的错误是:

“颜色”在“形状”中具有私有访问权限

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果格式正确,您的代码会更加更易于阅读。请让您的 IDE 格式化代码,然后阅读 editing help 以确保它在您的帖子中以这种方式显示。除此之外:是的,colour 是私有的,所以你不能在Circle 中设置它。不过你可以打电话给setColour
  • 是的,你会打电话给setColour传入你想要设置的颜色。 (这就是方法的重点。)不要将方法调用用作赋值的左侧,因为它不是变量。

标签: java inheritance


【解决方案1】:

我得到的错误是“颜色”在“形状”中有私有访问权限

因为colour确实是private

private String colour = "Red";

Circle 正在尝试直接访问该字段:

this.colour = Colour;

如果您想从Shapes 之外设置它(例如在Circle 中),那么您可以使用您的setter 方法。例如:

public Circle(int radius, String Colour) {
    this.radius = radius;
    this.setColour(Colour);
}

另一种选择是创建字段protected 而不是private,以便继承类可以直接访问它。但除非有令人信服的理由这样做,否则最好保留字段 private 并允许使用 getter/setter 来访问它们。由于在这种情况下有一个 public 设置器,因此只需使用它就足够简单了。

(顺便说一句,考虑将变量的名称从 Colour 更改为 colour 以更好地符合 Java 命名标准。)

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多