- class Father{
- void show() {
- System.out.println("Father");
- }
- }
- class Son extends Father {
- void show() {
- System.out.println("Son");
- }
- }
- public class Test{
- public static void main(String[] args) {
- Father f = new Son();
- f.show();
- Father f1 = (Father) new Son();
- f1.show();
-
- }
- }
复制代码
运行结果:
Son
Son
说明两个都是调用的子类的方法。
原理: 这个是父类引用指向子类对象。
编译和运行是两个独立的过程,编译时根据等号左边的类里是否有这个方法来判断对错。
比如这个程序里等号左边是Father类,有这个方法,编译通过。
但是运行时,是看等号右边的类。如果有该方法,就运行它,如果没有就查找父类的。
比如这个程序里等号右边是new Son(),所以运行时首先去Son里找方法,如果son里没有就去它的父类里找。 |