Почему мой подкласс не наследует частные переменные экземпляра своего суперкласса? - PullRequest
1 голос
/ 11 марта 2019

Я пишу программу на 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().

страницы имеют частный доступ к домашней работе * Тип 1015 *

имеет частный доступ к домашней работе

Разве Trigonometry не должен наследовать pages и type от родительского класса?Что я могу сделать, чтобы это исправить?

Ответы [ 4 ]

3 голосов
/ 11 марта 2019

private члены не могут быть доступны для подкласса.

Либо подкласс должен передавать начальные значения для этих членов из своего конструктора в конструктор суперкласса, либо вы можете использовать методы получения и установки public для доступа и изменения членов из подкласса.

public void createAssignment(int pages)
{
    setPages(pages);
    setType("Trigonometry");
}
2 голосов
/ 11 марта 2019

Приватный означает, что что-то доступно только внутри класса и нигде больше, даже в подклассах.Ожидаемого поведения можно достичь, используя ключевое слово «protected» вместо «private».Как и в

protected int pages; 

вместо

private int pages;

Я думаю, что этот другой вопрос о публичном частном и защищенном будет полезен.

Ответ Дэвида С. и Дрю:

Официальное руководство может вам пригодиться.

            │ Class │ Package │ Subclass │ Subclass │ World
            │       │         │(same pkg)│(diff pkg)│ 
────────────┼───────┼─────────┼──────────┼──────────┼────────
public      │   +   │    +    │    +     │     +    │   +     
────────────┼───────┼─────────┼──────────┼──────────┼────────
protected   │   +   │    +    │    +     │     +    │         
────────────┼───────┼─────────┼──────────┼──────────┼────────
no modifier │   +   │    +    │    +     │          │    
────────────┼───────┼─────────┼──────────┼──────────┼────────
private     │   +   │         │          │          │    

 + : accessible         blank : not accessible
1 голос
/ 11 марта 2019

Поскольку закрытые переменные экземпляра доступны только внутри класса, в котором они созданы. Если вы создаете подкласс, вам нужно будет использовать переменные защищенных экземпляров. Так что вам придется либо сделать ваши переменные общедоступными, либо желательно защищенными.

1 голос
/ 11 марта 2019

В вашем случае кажется, что вы хотите, чтобы оно было protected вместо private.

Подробнее здесь: В чем разница между public, protected, package-private иприват на Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...