java动态及静态绑定

   今天在老师和同学的帮助下,了解了一个比较重要的知识点,可能比较简单,但是我还是非常想和大家分享下的。

   就是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句话是没用的,你要仔细去理解。

你可能感兴趣的:(java,知识点,动态,public)