我正在测试各种组合,以构建一个超类和一个子类,当我执行以下操作时,我意识到无法从父类访问私有字段:
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抽象,以便使其子字段可以访问私有字段?
(Q2)如果我要使字段(大小)是私有的,我应该如何实现getter和setter,使子类可以访问私有字段?
发布于 2015-11-07 23:45:27
如果我希望将父类中的字段保持为私有而不受保护。我不应该使getter和setter抽象,以便使它的子域可以访问私有字段吗?
是的,因为该字段是私有的,并且只能在父类中定义getter和setter时才能访问。不应将getter和setter声明为抽象。
如果要使字段(大小)是私有的,那么应该如何实现getter和setter,使子类可以访问私有字段?
只需在私有字段所在的父类中实现普通的getter和setter即可。
abstract class Ball{
private int size;
protected Ball(int size){
this.size = size;
}
protected void setSize(int size){
this.size = size;
}
protected int getSize(){
return size;
}
}子类
class SoccerBall extends Ball{
public SoccerBall(int size){
super(size);
}
@Override
public void setSize(int size){
super.setSize(size);
}
@Override
public int getSize(){
return super.getSize();
}
}发布于 2015-11-07 23:30:08
与其尝试直接访问值,不如将大小的访问级别更改为“受保护”。这样,除了子类访问之外,它将大部分被封装。
https://stackoverflow.com/questions/33589025
复制相似问题