我有一个扩展了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中被重写的实现?
如果类覆盖方法,则将调用覆盖方法。尝试下面的示例:
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"
这是一个常见的错误,只调用构造函数中的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行