当前位置: 首页 > 知识库问答 >
问题:

如何访问子类覆盖的超类的方法?这在内存层面上可能是怎样的?

庄高谊
2023-03-14

我看到一个例子,其中一个超级类的原始方法是从子类的方法访问的,子类的方法是一个重写的方法。但是子类的实例只有一个方法是重写的方法,而不是超类的方法。但是子类为什么能够访问超类的方法。

表示子类实例只有overiden方法的引用

// 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个答案

申屠昌胤
2023-03-14

一个类可能有一个指向其实现方法的函数指针表。它可能有一个对其超类的引用(通过类布局隐式的,或者通过指针或某种引用显式的),并且可以间接访问该类的函数指针表。所有这些都是Java语言中没有指定的实现细节。

可以在第93页找到类似的内容:http://www.faq3.de/organizeme/pg/pdf/inside.the.c++.object.model.pdf

调用super.show()会在逻辑上移动到超类的函数指针(父)表,并调用该类的show()方法。

 类似资料:
  • 问题内容: 我试图摆脱Java继承的束缚,并且了解到,当重写子类中的方法(和隐藏字段)时,仍然可以使用“ super”关键字从父类中访问它们。 我想知道的是,是否应将“ super”关键字用于非重写方法? 有什么区别(对于非覆盖方法/非隐藏字段)? 我在下面整理了一个例子。 和 具体来说,鉴于尚未被覆盖,应使用或?。 我想知道是否应该在访问超类的字段或方法的所有实例中使用super(以在代码中显示

  • 我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。

  • 我有一个抽象类,割草机,它覆盖了toString()方法。草坪拖拉机类扩展了割草机。它覆盖了toString()方法,并调用super.toString()作为方法的第一行。然后我有一个商业类,它扩展了劳恩拖拉机并覆盖了toString(),也在第一行调用super.toString()。当实例化一个商业对象(声明为割草机对象)并调用它的toString()时,我希望它打印割草机和草坪拖拉机的两个

  • 问题内容: 说我有一个像这样的课程: 它具有一个带有扩展它的类的层次结构: 然后在其他地方,我有一堂课利用了这些东西: 我是否可以指定A的子类,以便使用更具体的“某物”类覆盖setSomething方法?这就是我想要做的: 目前,我正在A类中执行以下操作: 如果SuperSomething的类型不适合这些类,则B类和C类在checkClass方法中引发异常。 编辑:我已经尝试使用上述确切的方法签名

  • 问题内容: 是否有一种标准方法可以在Swift中制作“纯虚函数”,即。一个 必须 由每个子类中被覆盖,并且,如果不是的话,将导致编译时错误? 问题答案: 您有两种选择: 将超类定义为协议而不是类 Pro :编译时检查每个“子类”(不是实际的子类)是否实现了所需的方法 缺点 :“超类”(协议)无法实现方法或属性 2.声明该方法的超级版本 例: Pro :可以在超类中实现方法和属性 缺点 :不检查编译

  • 我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。