假设我有一个名为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?
}
}
谢谢
答案 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;
}
..
}