簡體   English   中英

為什么我的子類不繼承其超類的私有實例變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM