java - 使用抽象方法重写调用私有(private)变量

标签 java inheritance constructor abstract super

我有一个作业,需要创建一个包含构造函数的抽象类和一个将被子类覆盖的抽象方法。

作业的目的是以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/

相关文章:

c++ - 使用构造函数重新定义

c++ - 避免通过操作从私有(private)构造函数间接实例化

Java 二元有序树遍历 - 为什么在函数外部初始化 ArrayList 会产生影响?

java - 如何将 MultipartFile 从 Java 传递到 Python?

C++重载函数问题

c++ - 带有参数包的类模板的构造函数给出 C3520 错误

java - 没有可用的缓冲区空间(达到最大连接数?)形成 Postgres EDB 驱动程序

java - 如何将集合属性绑定(bind)到 Spring MVC 中的表单

c++ - 重写的虚方法仍然调用基类中的函数

c# - Resharper 提议从 WPF 中的 Window 类中删除冗余继承