Как мы можем получить доступ к методу суперкласса, который был переопределен подклассом? Как это возможно на уровне памяти? - PullRequest
0 голосов
/ 04 июля 2019

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

Ссылка, которая говорит, что экземпляр подкласса имеет толькометод отверждения

// A Java program to demonstrate that overridden  
// method can be called from sub-class 

// Base Class 
class Parent 
{ 
    void show() 
    { 
        System.out.println("Parent's show()"); 
    } 
} 

// Inherited class 
class Child extends Parent 
{ 
    // This method overrides show() of Parent 
    @Override
    void show() 
    { 
        super.show(); 
        System.out.println("Child's show()"); 
    } 
} 

// Driver class 
class Main 
{ 
    public static void main(String[] args) 
    { 
        Parent obj = new Child(); 
        obj.show(); 
    } 
} 

OUTPUT:
Parent's show()
Child's show()

1 Ответ

0 голосов
/ 04 июля 2019

Класс, вероятно, имеет таблицу указателей функций на методы его реализации.Он, вероятно, имеет ссылку (неявную с помощью макета класса или явную через указатель или какую-то ссылку) на свой суперкласс и имеет косвенный доступ к таблице указателей функций этого класса.Все это детали реализации, не указанные в языке Java.

Аналогия может быть найдена http://www.faq3.de/OrganizeMe/pg/pdf/inside.the.c++.object.model.pdf на странице 93

Вызов super.show () логически перемещает к классу суперкласса.(Родительская) таблица указателей на функции и вызывает метод show () этого класса.

...