![](/img/trans.png)
[英]Why can't my subclass access a protected variable of its superclass, when it's in a different package?
[英]Why doesn't my subclass inherit the private instance variables of its superclass?
我正在用Java編寫程序(我認為是11)。
我有一個抽象類:
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
遇到錯誤,然后type
createAssignment()
方法。
頁面在家庭作業中具有私人訪問權限
類型的作業有私人訪問權限
Trigonometry
不應該從其父類繼承pages
並進行type
嗎? 我該怎么做才能解決此問題?
子類不能訪問private
成員。
子類應該將這些成員的初始值從其構造函數傳遞給超類構造函數,或者您可以使用public
getter和setter方法從子類訪問和修改成員。
public void createAssignment(int pages)
{
setPages(pages);
setType("Trigonometry");
}
私有意味着某些東西只能在類內部訪問,而在子類中則無處可訪問。 您可以通過使用“ protected”關鍵字而不是“ private”來實現您期望的行為。 如
protected int pages;
代替
private int pages;
David S.和Drew的回答:
官方教程可能對您有用。
│ Class │ Package │ Subclass │ Subclass │ World │ │ │(same pkg)│(diff pkg)│ ────────────┼───────┼─────────┼──────────┼──────────┼──────── public │ + │ + │ + │ + │ + ────────────┼───────┼─────────┼──────────┼──────────┼──────── protected │ + │ + │ + │ + │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── no modifier │ + │ + │ + │ │ ────────────┼───────┼─────────┼──────────┼──────────┼──────── private │ + │ │ │ │ + : accessible blank : not accessible
就您而言,您似乎希望它受到protected
而不是private
。
此處有更多詳細信息: Java中public,protected,package-private和private之間有什么區別?
因為私有實例變量只能在類中訪問,所以它們是創建的。 如果創建子類,則需要利用受保護的實例變量。 因此,您要么必須公開變量,要么最好是對其進行保護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.