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

时间:2017-02-19 20:50:41

标签: java

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

public abstract class Book{

private double price;

public abstract double getPrice();

}//Ends book class

现在假设我有一个使用过的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?
}

}

谢谢

3 个答案:

答案 0 :(得分:3)

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

public abstract class Book{

    private double price;

    public double getPrice() {
        return price;
    }

}//Ends book class

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

答案 1 :(得分:2)

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

protected 访问修饰符表示该字段无法通过实例对象公开访问。但是,任何直接继承抽象 间接的子类都会将protected字段作为字段变量继承,并且具有相同的规则适用,不能公开访问。

所以要把它包起来, Book 类:

protected

继承 Book 类的子类:

public abstract class Book {
  protected double price;

  public abstract double getPrice();
}

答案 2 :(得分:1)

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

public abstract class Book{

    protected double price;

    public abstract double getPrice();

}

public class UsedBook extends Book{

...

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

..

}