2015-05-23 2 views
-1

У меня есть объект подкласса. Могу ли я получить доступ к скрытой переменной суперкласса без использования ключевого слова super. ?? Фактически, я нашел технику. Ее работа, но я не понимаю концептуальной причины этого.объект подкласса, доступ к скрытой переменной суперкласса

class A { 
    public int a = 5; 
    private int c = 6; 

    void superclass() { 
     System.out.println("Super class" + " " + "value of a is " + a); 
     System.out.println("Super class" + " " + "value of c is " + c); 
    } 
} 

class B extends A { 
    int b = 7; 
    int a = 8; 

    void subclass() { 
     System.out.println("Sub class" + " " + "value of b is " + b); 
     System.out.println("Sub class" + " " + "value of a is " + a); 
    } 
} 

class Demo { 
    public static void main(String args[]) { 
     A a1 = new A(); 
     B b1 = new B(); 

     b1.superclass(); 
    } 
} 

В приведенном выше коде, если b1 является объект класса B.I назвали метод суперкласса с именем superclass(); Теперь вывод a=5. Но мой аргумент - почему он не может быть a=8? a=5 скрыт и для доступа к нему мы должны использовать ключевое слово super. Но здесь без супер ключевого слова я получаю a=5. Как это возможно?

+0

Содержит ли ваш код? Я голосую, чтобы закрыть этот вопрос как вне темы. – CKing

+0

Я не думаю, что это так. Я переписывал две строки по ошибке. Я отредактировал этот вопрос, он будет более читабельным после его утверждения. @ChetanKinger, sidenote, я не чувствую, что это не по теме. –

+0

@AnindyaDutta Код не компилируется. Пожалуйста, прочитайте [this] (http://stackoverflow.com/help/on-topic) – CKing

ответ

2

Поля не переодеты.

Так что даже если B определяет int с именем «а» и A определяет тот же int с тем же именем, не означает, что они такие же поле.

Что можно увидеть здесь Encapsulation. Доступ к полям с помощью управляемого метода (здесь superclass()). Когда вы вызываете superclass, он ищет поле a, которое находится в пределах его собственного класса. Класс A ничего не знает о поле a в B, даже если он не существует.

Существует также еще один SnackOverflow вопрос здесь об этом: If you override a field in a subclass of a class, the subclass has two fields with the same name(and different type)?

+0

Означает ли это, что объект класса B имеет поля частной переменной родительского класса? –

0

В этом случае при вызове метода суперкласса, независимо от того, какой класс extends, он будет выводить значение, которое находится в class. Это связано с тем, что суперкласс не знает, какой (или сколько классов) его расширяет. Это основной принцип ООП encapsulation.

+0

Java не имеет 'функций'. – CKing

+0

'методы'. Извините за ошибку. –

Смежные вопросы