当前位置 博文首页 > 庆述倾述:Java父类中调用子类的方法
public interface In {
void doSomething();
}
父类:
public class T{
private In in;
public void setIn(In in){
this.in = in;
}
// 需要子类重写的普通方法
protected void layoutChildren() {
}
public void Hello(){
// 用子类对象,会调用子类实现方法
layoutChildren();
// 调用接口方法
in.doSomething();
}
}
子类:
public class CT extends T implements In {
@Override
protected void layoutChildren() {
System.out.println("HAHAHA");
}
@Override
public void doSomething() {
System.out.println("Do Something.");
}
@Test
public void getT(){
setIn(this);
Hello();
}
}
结果:
public static
,但更加离谱,因为父类不关心子类,不应该知道子类的类名,更不应该知道子类的方法。所以一般而言使用为上面的两种方式,注意到在父类中的layoutChildren
方法我们没有实现,可以申明为抽象方法,即:
public abstract class T{
private In in;
public void setIn(In in){
this.in = in;
}
// 需要子类重写
protected abstract void layoutChildren();
public void Hello(){
layoutChildren();
in.doSomething();
}
}
那么,我们父类在调用layoutChildren
方法的时候,就是调用子类的实现,但具体是哪个子类的实现,其实父类并不关心。接口也是如此的思想。也就是:
当然上面代码的接口方式我感觉写的不好,感觉可以尝试使用Spring
的DI
方式。