java多态(关于参数传入)
假使,父类为 :Parent 子类为:Son则会有下面的情况:
Parent p = new Son();
那么这个只能调用父类是的方法,如果子类Son有重写这些方法,就会调用Son中重写父类的方法。 有了这个前提,问题来了:
这里有一个方法传入的参数是父类(Parent),那么也可以传入它的子类Son。因为可以这样转换
Parent p = new Son();
public void test(Parent p){……}
但是传入Son时,为什么可以调用son自己特有的方法,而是不前一种情况:只调用子类中重写父类的法。
这里我只能理解前一种情况,后一种不知道该怎么理解。
[解决办法]
new 的谁就调用谁
[解决办法]
可以将p强转为Son类型来调用Son类的方法,参考以下代码:
public class Test3 {
public static void main(String[] args) {
Parent parent = new Son();
parent.a();
test(parent);
Son son = new Son();
son.a();
test(son);
}
static void test(Parent p) {
p.a();
// error
// p.b();
if (p instanceof Son) {
((Son) p).b();
}
}
}
class Parent {
public void a() {
System.out.println("pa");
}
}
class Son extends Parent {
@Override
public void a() {
System.out.println("sa");
}
public void b() {
System.out.println("sb");
}
}