Java继承:创建子类实例时如何调用超类方法?

坐着

在最近的一次采访中有人问我这个问题。希望获得帮助。

  • 类A具有从构造函数触发的foo()方法。
public class A {

    public A() {
        foo();
    }

    public void foo() {
        System.out.println("In foo method in class A");
    }
}

B类覆盖A类中的foo方法。

public class B extends A {

    @Override
    public void foo() {
        System.out.println("In foo method in class B");
    }
}

现在,如果我们创建类B的实例,则将调用B中的foo()方法。

A a = new B();
prints: "In foo method in class B"

问题:假设我们拥有类A,它是jar文件(abc.jar)的一部分,如何确定实例化类B的时间,是调用A.foo()而不是重写B.foo()?

条件:

  1. 想象一下,该jar与其他用户共享,并且我们无法破坏将我标记为私有/最终方法的客户端代码。

  2. 也不能从类B调用super.foo(),因为我们不拥有类B且不能限制用户。

安迪·特纳(Andy Turner)
public class A {

    public A() {
        fooInternal();
    }

    public void foo() {
        fooInternal();
    }

    private final void fooInternal() {
        System.out.println("In foo method in class A");
    }
}

您无法使其调用A.foo(),因为该方法已被覆盖。您只能使其调用一个调用的方法A.foo(),并且该方法不能被覆盖。

这里更重要的一点是,您永远不要从构造函数中调用可重写的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从重写的子类方法调用超类的继承方法?

Java继承:在超类中调用子类方法

实例化子类时从超类调用方法

在调用方法时获取扩展超类的子类实例

Python-如何从子类实例调用超类的方法?

Java:如何使用超类的静态方法从其创建子类的实例

如何从超类创建子类的实例的数组

如何从超类创建子类的实例?

如何使超类方法返回子类的实例

您如何在Java中从超类调用子类方法?

在Java中,“ this”在继承该方法的子类上调用的超类方法中表示什么?

通过超类实例调用子类类的方法

如何使子类自动调用超类方法

Java继承问题。在超类数组中调用子类方法不会编译

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

Java继承-调用超类方法

继承调用超类方法java

当子类对象存储在超类数组中时,如何调用子类方法?

如何使用超类的构造函数创建子类的实例

如何使用超类构造函数创建子类的实例?

如何创建给定超类的每个子类的实例?

使用type()创建子类时,调用超类init

从超类调用子类方法

通过传递子类的实例来调用超类的方法,期望子类实例上的超类参数

Java反射:从超类继承的类中调用GetDeclaredFields()方法

从Python超类运行方法时,如何知道调用它的子类的名称?

如何从修饰的子类方法中调用重写的超类方法

如何确保某些方法从子类(Java)中的方法从抽象超类中调用

从父类实例创建子类实例,从子类实例调用父方法