首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从父类访问私有字段

如何从父类访问私有字段
EN

Stack Overflow用户
提问于 2015-11-07 23:27:59
回答 2查看 4K关注 0票数 2

我正在测试各种组合,以构建一个超类和一个子类,当我执行以下操作时,我意识到无法从父类访问私有字段:

代码语言:javascript
复制
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,使子类可以访问私有字段?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-07 23:45:27

如果我希望将父类中的字段保持为私有而不受保护。我不应该使getter和setter抽象,以便使它的子域可以访问私有字段吗?

是的,因为该字段是私有的,并且只能在父类中定义getter和setter时才能访问。不应将getter和setter声明为抽象。

如果要使字段(大小)是私有的,那么应该如何实现getter和setter,使子类可以访问私有字段?

只需在私有字段所在的父类中实现普通的getter和setter即可。

代码语言:javascript
复制
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;
    }          
}

子类

代码语言:javascript
复制
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();
    }               
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-07 23:30:08

与其尝试直接访问值,不如将大小的访问级别更改为“受保护”。这样,除了子类访问之外,它将大部分被封装。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33589025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档