2012-06-16 2 views
0

вопрос о наследовании в Java ...супер защищенной Java

class Base { 
    private int val = 10; 
} 

class Derive extends Base{ 
    public void setVal(int value) { 
     super.val = value; 
    } 
} 

Так как мы можем изменить private поле в супер класса, используя ключевое слово super в подклассе, почему мы должны использовать protected объявить поля суперкласса ?

+1

Прежде всего, как говорится в ответе, это не будет компилироваться, вы не сможете получить доступ к закрытым полям, во-вторых, даже если бы вы могли, пожалуйста, используйте сеттеры/геттеры даже внутри страны. –

ответ

4

Вы не можете этого сделать. Код, который вы указали, не компилируется, если только Derive не объявлен как вложенный класс в пределах Base (что довольно редкий случай).

Вы должны получить сообщение об ошибке, как это:

error: val has private access in Base 
+0

да, спасибо. Я использовал вложенный статический класс для теста. Он предположил, что я никогда не должен делать этого, чтобы проверить доступность снова. – alaska

0

супер является ссылкой на переменную, которая используется для вызова родителей конструктор.

+0

супер определенно не переменная. – matiash

+0

@matiash sorry ссылочная переменная –

0

Проверьте свой код, вы никогда не сможете получить доступ к закрытой стороне класса, даже если вы унаследовали этот класс.