В Java не может получить доступ к защищенным членам суперкласса из подкласса - PullRequest
0 голосов
/ 11 января 2012
class Super {
   protected int a;
   protected Super(int a) { this.a = a; }
}

class Sub extends Super {
    public Sub(int a) { super(a); }
    public Sub() { this.a = 5; }
}




  public Sub() { this.a = 5; }  

this.a = 5 не работает.Почему это так?Защищенные и публичные члены должны быть унаследованы.

Ответы [ 3 ]

9 голосов
/ 11 января 2012

Проблема не в том, что вы обращаетесь к переменной, а в том, что вы не вызываете базовый конструктор:

class Super {
   protected int a;
   protected Super(int a) { this.a = a; }
}

class Sub extends Super {
    public Sub(int a) { super(a); }
    public Sub() { 
       super(0);  // <-- call base constructor
       this.a = 5; 
    }
}

Это происходит потому, что вы не определили конструктор по умолчанию для Super,поэтому производные классы не знают, какой конструктор вызывать, если вы его не указали.

0 голосов
/ 11 января 2012

Что не работает?Работает для меня ...

У вас нет конструктора по умолчанию - в public Sub() {this.a = 5; } вызывается родительский конструктор по умолчанию, который вы не предоставили.Если я скомпилирую ваш код, я получу:

cannot find symbol constructor Super()

Так что вы должны либо иметь конструктор по умолчанию, либо выполнить: public Sub() { super(5); }

0 голосов
/ 11 января 2012

Ваш конструктор без параметров в Sub пытается неявно вызвать конструктор без параметров в Super, который не существует, поэтому (я полагаю), почему вы получаете ошибку компиляции.

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