我之前一直不是很明白在多态情况下,引用变量所能使用的实际对象中的方法有哪些。
先说结论:多态使用的是被引用对象的方法,但这个方法必须在父类中定义过(不管在子类中是否重写),也就是说父类中没有定义的方法是无法调用的
测试代码如下:
package learn;
public class Test {
public static void main(String[] args) {
Father father = new Son();
father.fun1();
father.fun3();
}
}
class Father {
void fun1(){
System.out.println("this is father");
}
void fun3(){
System.out.println("this is father fun3");
}
}
class Son extends Father{
void fun1(){
System.out.println("this is son");
}
void fun2(){
System.out.println("this is son2");
}
}
输出结果如下:
这说明,使用的是在子类对象中(也就是多态的实际对象)所重写的父类的方法。
而当我想调用子类中新写的方法fun2()的时候:在IDEA中并没有出现fun2()的选择项。