繁体   English   中英

从抽象类访问私有变量,访问方法为抽象

[英]Accesing private variable from abstract class with access method as abstract

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

    public abstract class Book{

        private double price;

        public abstract double getPrice();

    }

现在假设我有一个使用过的 Book 类,它继承了 Book 的所有属性,但也有一个与之相关的年龄。 另外我希望这个类从它的父类覆盖 getPrice 方法。 这是我卡住的地方,因为 price 变量是私有的,并且父类有一个抽象的 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?
        }

    }

谢谢你

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

public abstract class Book{

    private double price;

    public double getPrice() {
        return price;
    }

}//Ends book class

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

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

protected访问修饰符意味着该字段不能通过实例对象公开访问。 然而,任何直接间接继承Abstract类的子类都将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;
  }
}

将价格标记为受保护,然后您可以从子类访问它:

public abstract class Book{

    protected double price;

    public abstract double getPrice();

}

public class UsedBook extends Book{

...

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

..

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM