首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的子类不继承其超类的私有实例变量?

为什么我的子类不继承其超类的私有实例变量?
EN

Stack Overflow用户
提问于 2019-03-11 13:02:38
回答 3查看 112关注 0票数 1

我正在用Java编写一个程序(我认为是11)。

我有一节抽象的课:

代码语言:javascript
复制
public abstract class Homework
{
    // instance variables - replace the example below with your own
    private int pages;
    private String type;

    /**
     * Constructor for objects of class Homework
     */
    public Homework()
    {
        // initialise instance variables
        pages = 0;
        type = "none";
    }

    public void setPages(int pages)
    {
        this.pages = pages;
    }
    public int getPages()
    {
        return pages;
    }
    
    public abstract void createAssignment(int pages);
}

和一个子类:

代码语言:javascript
复制
public class Trigonometry extends Homework
{
    /**
     * Constructor for objects of class Trigonometry
     */
    public Trigonometry()
    {
        super();
    }
    
    public void createAssignment(int pages)
    {
        this.pages = pages;
        type = "Trigonometry";
    }
}

我在this.pagestypecreateAssignment()方法中得到了一个错误。

页面在作业中有私人访问权限。 类型在家庭作业中具有私有权限。

Trigonometry不应该从它的父类继承pagestype吗?我能做些什么来解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2019-03-11 13:05:57

子类不能访问private成员.

子类应该将这些成员的初始值从其构造函数传递到超类构造函数,或者可以使用public getter和setter方法从子类访问和修改成员。

代码语言:javascript
复制
public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}
票数 3
EN

Stack Overflow用户

发布于 2019-03-11 13:16:30

在您的例子中,您似乎希望它是protected而不是private

这里有更多详细信息:在Java中,公共、受保护、包私有和私有包之间有什么区别?

票数 1
EN

Stack Overflow用户

发布于 2019-03-11 14:25:01

因为私有实例变量只能在创建的类中访问。如果创建子类,则需要利用受保护的实例变量。所以你要么必须公开你的变量,要么保护你的变量。

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

https://stackoverflow.com/questions/55102445

复制
相关文章

相似问题

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