使用抽象访问方法从抽象类访问私有变量

新手上路,请多包涵

假设我有一个名为 book 的抽象类,它有一个私有变量 price,并且它的 getter 方法也是抽象的。

     public abstract class Book{

        private double price;

        public abstract double getPrice();

    }

现在假设我有一个用过的 Book 类,它继承了 Book 的所有属性,但也有一个与之关联的年龄。我还希望这个类从它的父类中覆盖 getPrice 方法。这是我卡住的地方,因为价格变量是私有的,而且父类有一个抽象的 getter 方法。

     public class UsedBook extends Book{

        private int age;

        //constructor
        public UsedBook(){
            age = 1;
        }

        @Override
        public double getPrice(){
            //How can I implement this method so as a user I can access the price?
        }

    }

谢谢你

原文由 Kevag6 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 556
2 个回答

如果 Book 的所有实现都必须实现 getPrice() ,并且实现总是只返回价格,它不应该是抽象的。您应该只在抽象类中定义吸气剂:

 public abstract class Book{

    private double price;

    public double getPrice() {
        return price;
    }

}//Ends book class

如果这不起作用,并且您需要从继承类中直接访问 price 变量,那么您应该将其更改为 protected 而不是 private

原文由 nhouser9 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不希望从 抽象 类公开访问 price 字段变量,则应将访问修饰符从 private 更改为 protected

protected 访问修饰符意味着该字段不能通过实例对象公开访问。然而,任何 直接间接 继承 抽象 类的子类都有 protected 字段作为字段变量继承,同样的规则适用,它不能公开访问。

总结一下, Book 类:

 public abstract class Book {
  protected double price;

  public abstract double getPrice();
}

继承 Book 类的子类:

 public class UsedBook extends Book{

  private int age;

  public UsedBook(){
    this.age = 1;
    this.price = 0; // You should also set the field variable from the abstract "Book" class
  }

  @Override
  public double getPrice(){
    return this.price;
  }
}

原文由 Den Isahac 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏