1.不是不用,而是根本不可以在里面写任何的函数实现部分2.是的,否则会编译通不过3.这个是类型转换GIA因为实现了IA接口,所以GIA可以直接转换成IA实例
  所以可以赋值给m_ia。就是GIA可以转换成IA

解决方案 »

  1.   

    1.接口的定义本身就是只有名字没有实现,形象点说就是只给路口你,但不告诉你怎么走;2.实现当然要全部实现,因为你既然实现继承下来,当然就要按着这个路口进入,具体走法你就可以自己选择啦,当然你可以在父亲的基础上另辟捷径;3.这是你自己定义的,new句柄就是实例化的过程,因为IA是父亲并不一定拥有GIA的实现途径,所以这种实例化之后,m_ia就是一个丰满的GIA实例,当然它仍然具有IA接口内的所有方法。
      

  2.   

    那我用以上的m_ia经过实例化后可不可以调用GIA中的方法,还是只可以调用接口本身中的方法?
      

  3.   

    实例化后当然用GIA的方法,当然如果GIA没有改写IA的方法,其实就是用IA的方法,但从来没有人会这样说的,因为IA有的方法GIA一定有,但GIA有的方法反倒IA不一定有。
      

  4.   

    发现了一个奇怪的问题,在某一个类中public class H()
    {
      int HK;
      public void D(){
        if(HK == IA.HK){ //在IA中也有一个变量是HK
        ...
        }
      }
    }但在这个类中并没有实现接口功能,也没有实例化IA,为什么可以直接用IA.HK的?
      

  5.   

    1. 与2同意 ChDw(米) 的观点3。接口本身就表达了对象的类型,这也是java对象多型的表现,也就是说,一个对象可以表现为多种类型,而一个接口仅反映了一个对象的一方面的特性。因此,this.m_ia中虽然是一个GIA的实例,但由于GIA是属于IA类型的,GIA完全具备IA要求的特性,所以this.m_ia这个句柄可指向一个GIA实例。4。你如果通过m_ia直接调用,只能调用IA中的方法,而不能调用GIA中别的方法(IA中所没有的)。但通过下述方法对m_ia造型后,可调用GIA中的方法:
      (GIA)m_ia.methodOnlyInGIA();
      

  6.   

    回答问题:
    “但在这个类中并没有实现接口功能,也没有实例化IA,为什么可以直接用IA.HK的?”接口中只能在方法定义和常量,不可能出现变量。所以IA.HK类型肯定是:
      public static final type HK = vlaue;所以在别的任何类中,只要import了IA类,就可使用HK常量。
      

  7.   

    如果class H和interface IA在同一个package当中,IA是不用实例化都可以用的另外IA当中HK字段应该是一个static变量
      

  8.   

    上面的情况都说对了:是在同一个包中,也是static final!假如像 ericsome(GzEric)所说:
    “如果class H和interface IA在同一个package当中,IA是不用实例化都可以用的”那么在同一个包中的其他不是接口的类B的对象(GH)是不是也可以不用实例化就可以在同一个包的其他类A中调用类B中的对象(GH)?
      

  9.   

    IA.HK之所以不能实例化就可调用,是因为它是 static final 的。所以你问B中的GH能否不用实例化就可使用,这要看GH的性质。如果它是static的,当然就可在A中直接调用,而不能实例化B,当然GH对象必须初始化,要不然你会在实际运行程序时碰到一个空指针 。
      

  10.   

    Good,thank you for all!