对于父类引用指向子类,先看下面一段代码
package chapter6_8;
public class Father {
private int m=10;
public Father(){
System.out.println("这是父类");
}
public void talk(){
System.out.println("我是你爹");
}
public void eat(){
System.out.println("父类吃饭");
}
}
package chapter6_8;
public class Child extends Father {
public Child(){
System.out.println("这是子类");
}
public void talk(){
System.out.println("这是儿子");
}
public void test1(){
System.out.println("子类测试方法");
}
}
package chapter6_8;
public class InstanceOfTest {
public static void main(String [] args){
Father father=new Child();//先调用父类构造函数,在调用子类构造函数
father.talk();//可以使用父类有,子类重写的
//father.test();//不能使用父类没有的方法
father.eat();//可以使用父类有,但子类没有重写的
}
}
运行结果如下:
这是父类
这是子类
这是儿子
父类吃饭
1、父类引用子类对象时,先调用父类构造函数,再调用子类构造函数;
2、当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。如果子类重写了该方法,就调用子类的,没有就用父类的(即就近原则)
在这里插入图片描述