Java 为什么我的子类不继承其超类的私有实例变量?
我想我正在用Java11编写一个程序 我有一个抽象类: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
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中方法和变量的可见性有关。只要在谷歌上搜索一下,你就会找到很多文章。不同语言之间的概念略有不同,但这些概念通常适用于所有语言。因为它们是。。。私有实例变量。为了使它们在任何子类中都可以访问,请对它们进行保护。