编译时类型 和运行时类型的 区别(1)

class T{
void f(int x){
System.out.println("int in T:" +x);
}
void f(double x){
System.out.println("double in T:"+x);
}
void f(Object x){
System.out.println("Object in T:" +x);
}
}

class S extends T{
void f(int x){  //子类覆盖基类方法
System.out.println("int in S:" +x);
}
void f(float x){
System.out.println("float in s:" +x);
}
}


public class quest3{
public static void main(String[] args) {
T t=new S();
// t编译时类型 调用 T的方法 并判断子类是否有覆盖

t.f(20); // 基类方法被子类覆盖 输出子类 int in s

t.f(20L); //基类方法
t.f(3.5f); //基类方法
t.f(3.5); //基类方法
t.f("abcdef"); //基类方法
}
}

 

 

输出结果:

int in S:20
double in T:20.0
double in T:3.5
double in T:3.5
Object in T:abcdef

posted @ 2016-08-09 15:59  讲义大魔王  阅读(758)  评论(0编辑  收藏  举报