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

继承-调用什么方法?

祁刚毅
2023-03-14

我有一个扩展了B类的a类。

A是这样定义的,它也覆盖了B的方法:

class A extends B
{
    public A() {
        super();
    }

    @Override
    public void doSomething(){
        //does something
    }
}

B是这样定义的:

public class B
{
    public B(){
        doSomething();
    }

    public void doSomething(){
        //does something
    }
}

因此,如果我初始化A的一个对象,构造函数将调用调用方法doSomething()的超类之一。但哪一个会被处决?B的实现还是A中被重写的实现?

共有2个答案

段良弼
2023-03-14

如果类覆盖方法,则将调用覆盖方法。尝试下面的示例:

public class A {
 void doSomething() {
  System.out.println("a");
 }
}
public class B extends A {
 @Override
 void doSomething() {
  System.out.println("b");
 }
}
A a = new B();
a.doSomething(); // will print "b"
微生烨然
2023-03-14

这是一个常见的错误,只调用构造函数中的final方法,将调用a中的方法。

顺便说一句Sonar(如果你有的话)将在这里触发一个规则,说明你不应该在构造函数中调用多态方法

 类似资料:
  • 问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。

  • 问题内容: 假设我有多个继承方案: 有编写的两个典型方法的: (老式) (较新的样式) 但是,无论哪种情况,如果父类(和)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失,或被多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果或来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看

  • 嘿,我正在尝试调用子类方法(ChildClass扩展了超类()) 它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯

  • 我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与

  • 我在我的程序中使用了实现继承,我的子类中的方法没有在主方法中被调用。它显示了错误“方法getArea()不在第二类型中定义”。getPerimeter()方法也有同样的问题。 我试过设置值和改变参数。 三角形。有关计算三角形面积的公式,请参见编程练习2.15。toString()方法的实现如下:return“Triangle:side1=“side1”side2=“side2”side3=“sid

  • 在Fruit构造函数中调用fryName方法,实际上是将调用委托给子Apple类的方法! } 这背后的主要尝试是,我试图调用父方法,而不使用简单的方式super。在子方法内调用fruitName()。 请帮帮我@第12行