import java.util.*;
public class Homeworks {
public static void fun() {
System.out.println("Father");
}
public void Haha() {
System.out.println("FatherHaha");
}
public static void main(String[] args) {
Son son = new Son();
Homeworks fson = new Son(); //用父类声明
son.fun();
son.fun(1);
System.out.println();
((Son)fson).fun();
((Son)fson).fun(1);
System.out.println();
fson.fun();
//fson.fun(1); 报错
System.out.println();
son.Haha();
fson.Haha();
// fson.Try(); 报错 由于找不到子类的这个方法
}
}
class Son extends Homeworks {
public static void fun() {
System.out.println("Son");
}
public static void fun(int a) {
System.out.println("ReSon");
}
public void Haha() {
System.out.println("SonHaha");
}
public void Try() {
System.out.println("Try");
}
}
/*
运行结果
Son
ReSon
Son
ReSon
Father
SonHaha
SonHaha
*/
因为编译看左边,所以用父类申明的对象不能直接调用子类里特有的方法,需要强制类型转换才能调用。
因为运行看右边,所以调用被子类覆盖的方法时,运行子类里定义的方法(及真正的构建类里的方法)。