我看到一个例子,其中一个超级类的原始方法是从子类的方法访问的,子类的方法是一个重写的方法。但是子类的实例只有一个方法是重写的方法,而不是超类的方法。但是子类为什么能够访问超类的方法。
表示子类实例只有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()
一个类可能有一个指向其实现方法的函数指针表。它可能有一个对其超类的引用(通过类布局隐式的,或者通过指针或某种引用显式的),并且可以间接访问该类的函数指针表。所有这些都是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正在实例化,那么为什么它的方法不可访问。