我有一个作业,需要创建一个包含构造函数的抽象类和一个将被子类覆盖的抽象方法。
作业的目的是以RegularPolygon类为基类,确定不同多边形的面积。
当我通过子类扩展调用该方法时,它打印出零。我知道问题在于变量的范围。基本上我知道我的变量端不会从父类(super class)中读取,因为它是私有(private)的。我不知道如何在不将其从私有(private)更改为公共(public)或 protected 情况下解决此问题。它需要保持私密性。
正多边形
public abstract class RegularPolygon
{
private double side;
public RegularPolygon(double length)
{
side = length;
}
public abstract double getArea();
}
正方形
public class Square extends RegularPolygon
{
private double side;
public Square(double length)
{
super(length);
}
public double getArea()
{
return side*side; //this returns 0
}
}
最佳答案
一种方法是为 RegularPolygon
创建一个公共(public) getSide()
方法来检索 side
中的值。这样您将只能检索 side
中的值,但仍然无法更改它。
代码如下:
// Main.java
public static void main(String[] args) {
Square sq = new Square(3);
System.out.println(sq.getArea()); // 9.0
}
这将是 RegularPolygon 类
public abstract class RegularPolygon
{
private double side;
public RegularPolygon(double length)
{
side = length;
}
public abstract double getArea();
// Add this...
public double getSide() {
return side;
}
}
还有...... Square 类
public class Square extends RegularPolygon{
public Square(double length)
{
super(length);
}
public double getArea()
{
// use 'this.getSide()' to retrieve the value in 'side'
return this.getSide()*this.getSide();
}
}
关于java - 使用抽象方法重写调用私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34959667/