今天在老师和同学的帮助下,了解了一个比较重要的知识点,可能比较简单,但是我还是非常想和大家分享下的。
就是java里的静态和动态绑定的问题。
2句话。今天刚学的
方法动态绑定到变量上,
属性静态绑定到对象类型上。
怎么理解?
写段简单的代码,让大家能够比较好的理解。
定义2个类作测试
class Foo{
int a=1;
public void a(){
System.out.println(1);
}
public static void b(){
System.out.println(3);
}
}
class Koo extends Foo{
int a=2;
public void a(){
System.out.println(2);
}
public static void b(){
System.out.println(4);
}
}
主函数
public static void main (String[] args){
Foo foo=new Koo();
System.out.println(foo.a);
//属性静态绑定到对象类型上,foo对象类型是Foo,所以输出1
foo.a();
//方法动态绑定到变量上,变量foo指向的是Koo实例对象,所以变量的a方法其实是指Koo的a方法
//所以输出2;
foo.b();
//这样写是有警告的,因为b是静态方法,应该用类名直接调用,但是这样写没错
//这种题也会被别人出出来刁难你
//静态方法和属性是一样的,静态绑定到对象类型上
//因为foo是Foo类型的,所以输出3;
}
虽然比较简单,但是初学者往往会在这种问题上搞混,单单记住上面2句话是没用的,你要仔细去理解。
















