JAVA里不能多继承,是不是只是因为这样在调用父类的方法时会产生二义性??如果不只是这样,还有什么原因吗
C++里面不是有虚基类解决这个问题吗,JAVA为什么不这样
实现接口和继承抽象类差不多啊,那么实现接口为什么就可以呢
多了一个接口的概念,还有些什么好处??

解决方案 »

  1.   

    C++ 具有多重继承,并带来了一些复杂的特性,很少有人使用多重继承。在java中从一个基类派生并附加接口可以具备C++里的多重继承的功能,但又没那么的复杂。
      

  2.   

    http://dev.yesky.com/436/7581936.shtml
    接口,抽象类的区别
      

  3.   

    你可以看看spring方面的书,这个或许对你有帮助.还有继承抽象和实现接口的区别网上的例子很多,你可以看看,好象是5个区别吧.
      

  4.   

    而且刚才我试了一下,二义性还是有的,在接口中I定义一个常量CONST=10,在另外一个类A中定义public static final的常量CONST=20,如果B继承了A实现了I,那么使用B中的CONST就会产生错误
    如果是方法的话,A中有和I同名的方法,如果B继承A实现I的话,它要实现I中的这个方法,虽然编译通过了,但是在B中访问这个方法时,调用的是实现接口I的那个方法,是不是A中的方法就相当于被重写了??另外想问下@Override这个是不是只在eclipse中才可以用,好像JCreator中用会报错
      

  5.   

    肯定有不同拉,你要是用继承的话,就不要再继承其它类了,因为java是单继承的.而实现接口后还可以继续继承其它类,所以如果你还要继承其它类的话就只能实现接口的方法了
      

  6.   

    我的理解:c++中的多继承会引来很多麻烦。所以Java中就去掉了但要需要这么一个功能,所以就产生了接口实现接口与继承抽象类有什么区别??  实现接口不能说明他们之间有什么关系,(就是不能说明他们之间有“同类”关系)因为他可以同时实现多个接口,但继承抽象类的话说明有“包含”关系,或是“同类”关系。因为他只能继承一个。
      

  7.   

    我直接举个例子吧interface I{
    void interfaceMethod();
    int CONST=10;
    }class A{
    public void interfaceMethod(){
    System.out.println("sameA");
    }
    public void anotherMethod(){
    System.out.println("aaa");
    }
    public static int CONST=20;
    }class B extends  A implements I{
    public void interfaceMethod(){ System.out.println("sameB");
    }
    public void anotherMethod(){ System.out.println("bbb");
    }
    }
    public class Test{
    public static void main(String[] args){
    A a=new A();
    a.interfaceMethod();
    a.anotherMethod();
    B b=new B();
    b.interfaceMethod();
    b.anotherMethod();
    A c=new B();
    c.interfaceMethod();
    c.anotherMethod();
    System.out.println(a.CONST);
    // System.out.println(b.CONST);        //加上报错
    System.out.println(c.CONST);        //这个不会

    }
    }sameA
    aaa
    sameB
    bbb
    sameB
    bbb
    sameB
    bbb
    20
    20-----------------------
    上面的class A,class B extends class A后面如果换着加implements I结果也是相同的可以告诉我为什么结果是这个吗,特别是第三第四个输出,还有注释的两处
      

  8.   

    还有这个忘记贴了main中全部是这样的 A a=new A();
    a.interfaceMethod();
    a.anotherMethod();
    B b=new B();
    b.interfaceMethod();
    b.anotherMethod();
    A c=new B();
    c.interfaceMethod();
    c.anotherMethod();
    A d=(A)c;
    d.interfaceMethod();
    d.anotherMethod();
    System.out.println(a.CONST);
    // System.out.println(b.CONST); //这句报错
    System.out.println(c.CONST); //这个就不会
      

  9.   

    JAVA类全部继承于OBJECT,好像就是要解决继承混乱的问题。
    至于抽象类和接口,个人觉得抽象类就像画画,先画个框架,再临摹框架画再添东西,接口好像链条上的配件,配件的规格给你了,你做个什么挂上去都可以。
      

  10.   

    同时继承并实现某个接口,如Runnable,会出现线程自动挂掉,请问是什么原因呢?