[英]Call an overriden method from the super class
我有一个关于覆盖方法的问题。 如果我有一个类,该类具有可以被子类覆盖但在超类中调用的方法
public class a {
//this is the main class
public a() {
//etc code
callMethod();
}
void callMethod() {
//do nothing here. will be overriden in subclas
}
public class b extends a {
void callMethod() {
//actually impliment here
}
}
我怎么称呼b类对a类方法的暗示
可能您的意思是:
public class b extends a
在这种情况下,代码:
a aa = new b();
将调用b.callMethod()
。 请注意,从构造函数调用重写的(非私有)方法是一个坏主意。
如果将callMethod
方法的可见性更改为protected
则将b.callMethod()
,即使从超类也是如此。
protected关键字告诉Java该方法对于子类是可见的。 并通过扩展使其虚拟化。
以下将导致编译器错误:“需要包含Demo.AB的封闭实例。” 在以下内容中讨论:需要一个包含<my reference>的封闭实例 。 因此,答案是:您不能这样做。 将其写入自己的类文件中,而不是嵌套类中。
package Demo;
import Demo.A.B;
public class Demo {
public static void main(String[] args) {
A test = new B();
}
}
Package Demo;
public class A {
public A() {
callMethod();
}
void callMethod() {
System.out.println("Called from A");
}
public class B extends A {
@Override
void callMethod() {
System.out.println("Called from B");
}
}
}
(A.java)
Package Demo;
public class A {
public A() {
callMethod();
}
void callMethod() {
System.out.println("Called from A");
}
}
(Java)
package Demo;
public class B extends A {
@Override
void callMethod() {
System.out.println("Called from B");
}
}
您不能但可以为类b创建构造函数,调用工作流将是下fileds a - > constructor a - > method from a-> constructor b - > method from b
public abstract class a {
//this is the main class
public a() {
//etc code
callMethod();
}
abstract void callMethod();
}
public class b extends a {
void callMethod() {
//actually impliment here
}
}
但是不要这样做。 从父类的构造函数调用此方法将导致维护噩梦和不良设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.