[英]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.