Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的子类不继承其超类的私有实例变量?_Java_Oop_Inheritance_Compiler Errors - Fatal编程技术网

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

Java 为什么我的子类不继承其超类的私有实例变量?,java,oop,inheritance,compiler-errors,Java,Oop,Inheritance,Compiler Errors,我想我正在用Java11编写一个程序 我有一个抽象类: 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 */ pub

我想我正在用Java11编写一个程序

我有一个抽象类:

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);
}
和一个子类:

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.pages中得到一个错误,并键入createAssignment方法

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

类型在家庭作业中具有私有访问权限

三角函数不应该从其父类继承页面和类型吗?如何解决此问题?

子类无法访问私有成员

public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}
子类应该将这些成员的初始值从其构造函数传递给超类构造函数,或者您可以使用公共getter和setter方法来访问和修改子类中的成员

public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}
子类无法访问私有成员

public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}
子类应该将这些成员的初始值从其构造函数传递给超类构造函数,或者您可以使用公共getter和setter方法来访问和修改子类中的成员

public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}

在您的情况下,似乎您希望它受到保护,而不是隐私


这里有更多详细信息:

在您的案例中,您似乎希望它受到保护,而不是私有的


这里有更多详细信息:

Private意味着某些内容只能在类内部访问,而在其他任何地方都无法访问,即使在子类中也是如此。 您期望的行为可以通过使用protected关键字而不是private来实现。 如

而不是

private int pages;
David S.和Drew的回答:

也许对你有用

│ Class │ Package │ Subclass │ Subclass │ World │ │ │(same pkg)│(diff pkg)│ ────────────┼───────┼─────────┼──────────┼──────────┼──────── public │ + │ + │ + │ + │ + ────────────┼───────┼─────────┼──────────┼──────────┼──────── protected │ + │ + │ + │ + │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── no modifier │ + │ + │ + │ │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── private │ + │ │ │ │ + : accessible blank : not accessible
Private意味着某些东西只能在类内部访问,而不能在其他任何地方访问,即使在子类中也是如此。 您期望的行为可以通过使用protected关键字而不是private来实现。 如

而不是

private int pages;
David S.和Drew的回答:

也许对你有用

│ Class │ Package │ Subclass │ Subclass │ World │ │ │(same pkg)│(diff pkg)│ ────────────┼───────┼─────────┼──────────┼──────────┼──────── public │ + │ + │ + │ + │ + ────────────┼───────┼─────────┼──────────┼──────────┼──────── protected │ + │ + │ + │ + │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── no modifier │ + │ + │ + │ │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── private │ + │ │ │ │ + : accessible blank : not accessible
因为私有实例变量只能在创建它们的类中访问。如果创建子类,则需要利用受保护的实例变量。因此,您要么将变量公开,要么最好对其进行保护

因为私有实例变量只能在创建它们的类中访问。如果创建子类,则需要利用受保护的实例变量。因此,您要么将变量公开,要么最好对其进行保护

它们是私有的……它确实继承了它们,但它没有访问它们的权限,因为它们是私有的。这与java中方法和变量的可见性有关。只要在谷歌上搜索一下,你就会找到很多文章。不同语言之间的概念略有不同,但这些概念通常适用于所有语言。因为它们是。。。私有实例变量。为了使它们在任何子类中都可以访问,请对它们进行保护。它们是私有的……它确实继承了它们,但它无法访问它们,因为它们是私有的。这与java中方法和变量的可见性有关。只要在谷歌上搜索一下,你就会找到很多文章。不同语言之间的概念略有不同,但这些概念通常适用于所有语言。因为它们是。。。私有实例变量。为了使它们在任何子类中都可以访问,请对它们进行保护。