Доступ к члену бабушки и дедушки в Java с помощью super

Опубликовано: 15 Февраля, 2022

Прямой доступ к члену бабушки и дедушки в Java:

Predict the output of the following Java program.

Java

// filename Main.java
class Grandparent {
    public void Print()
    {
        System.out.println("Grandparent"s Print()");
    }
}
 
class Parent extends Grandparent {
    public void Print()
    {
        System.out.println("Parent"s Print()");
    }
}
 
class Child extends Parent {
    public void Print()
    {
        // Trying to access Grandparent"s Print()
        super.super.Print();
        System.out.println("Child"s Print()");
    }
}
 
public class Main {
    public static void main(String[] args)
    {
        Child c = new Child();
        c.Print();
    }
}

Выход:

 prog.java:20: ожидается ошибка: <идентификатор>
        super.super.Print ();
              ^
prog.java:20: ошибка: не утверждение
        super.super.Print ();

Ошибка в строке «super.super.print ();». В Java класс не может напрямую обращаться к членам дедушки и бабушки. Однако это разрешено в C ++. В C ++ мы можем использовать оператор разрешения области видимости (: :) для доступа к любому члену предка в иерархии наследования. В Java мы можем получить доступ к членам дедушки и бабушки только через родительский класс.

Например, следующая программа компилируется и работает нормально.

Почему Java не позволяет получить доступ к методам дедушки и бабушки?

Это нарушает инкапсуляцию. У вас не должно быть возможности обойти поведение родительского класса. Иногда имеет смысл иметь возможность обойти поведение вашего собственного класса (особенно из того же метода), но не поведение вашего родителя.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .