我正在尝试着组合创建一个超类和一个子类,但是我发现当我执行以下操作时,无法访问父类中的私有字段:
abstract class Ball{
private int size;
protected Ball(int size){
this.size = size;
}
public abstract void setSize(int size);
public abstract int getSize();
}
class SoccerBall extends Ball
{
public SoccerBall(int size){
super(size);
}
@Override
public void setSize(int size){this.size = size;}//size not inherited
@Override
public int getSize(){return size;} //size not inherited
}
我知道私有字段不会被继承到子类。访问它的唯一方法(可能除了反射之外)是使用getter和setter。
所以我的问题:
(Q1) 如果我想将字段保留在父类中并保持为私有,而不是受保护的。我应该不在getter和setter中使用abstract,以便使私有字段可供其子类访问吗?
(Q2) 如果我将字段(大小)设置为私有,如何实现getter和setter以使私有字段可供子类访问?
size
更适合被保护吗?我将它设置为私有是因为我在许多场合看到父类持有私有字段。一些SO解决方案也提到这样做是可以的,但必须通过getter和setter来访问它。但现在我在想,我们应该如何使用getter和setter访问私有字段呢? - user3437460