本帖最后由 dnnl_1990 于 2011-03-26 21:39:50 编辑

解决方案 »

  1.   

    从实际作用来看没有什么区别  n可以调用clone方法和finalize方法  m不可以,除此之外都一样m可以调的n也可以调
      

  2.   

    如果引用时接口类型,那么该引用只能调用接口中声明的变量或方法,接口中的变量都默认是public,final,static的,方法都是public的,如果引用是实现了接口的类的类型,则都可以调用
      

  3.   

    你B这个类还有个变量b啊,不好意思没看到。就像你说的m.b确实不行。A m = new B();这种方式是多态,JVM在处理多态时采用的是动态绑定方法,静态绑定变量的策略
      

  4.   

    也就是说当你调用变量的时候,是在编译期就决定到底调用哪个类的变量,而m是A类型的 自然没有b这个变量,所以m.b是错误的。而对方法的调用是在运行期决定的,也就是说m要调的方法是B类型的,所以无论是m.f()还是n.f()都是B类里面的。
      

  5.   

    这题目就是一个多态的问题,其实属性是不具有多态性的,只有方法具有多态性,这边m.b自然是不可以调用的,因为编译是类型是A类型的,而A中根本就没有b这个常量
      

  6.   

    n 是class B 的引用,指向class B的一个实例,可以访问到class B的类信息。
    m 是interface A的引用,指向class B的一个实例,可以访问到interface A的接口信息,不能访问到class B的类信息。这是接口方面向上转型,常用于多态。一般都是提倡用A m = new B();这种方式