父类方法传入的参数是子类类型
观看别人代码的时候发现父类中的一个方法定义的传入值是子类类型,基础不太牢固,不太明白为什么这样用可以成功
父类car
package test;
public abstract class car {
public car() {}
public void run(boolean value) {
if (value == true)
System.out.println("this car is running!");
}
public abstract void TestWorking(Working carname);
}
子类Working
package test;
public class Working extends car{
private Object value;
public void run(boolean value) {}
public Working() {
}
public Working(Working value) {
this();
}
public void TestWorking(Working carname) {
System.out.println(carname.getValue().toString());
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
执行的代码testrunning
package test;
public class testrunning {
public static void main(String[] args) {
Working work = new Working();
work.setValue("nissa");
work.TestWorking(work);
}
}
最后是成功得到了nissa的结果,
但是我对父类car中的这段代码实在不太理解
public abstract void TestWorking(Working carname);
目前代码是否使用到链式调用呢 ?感觉很像
以及一开始的问题是觉得父类中调用子类类型为什么不报错,后来测试了一下觉得是因为加载的时候都先加载各自的构造函数,所以在TestWorking方法被加载之前子类构造函数已经存在才不会报错?不知道这样理解是否正确
然后认为testworking是否是向上转型,但是仔细看了一下向上转型的demo感觉不是