就是java如何解决多重继承的父类方法重名的问题,interface a{
  int a=1;
  void f();
}interface b{
  int a=2;
  void f();
}class AB implements a,b{
   public static void main(String args[]){
       System.out.println(a);
   }
}
这代码当然是通不过编译的。
但是java通过接口又是怎样实现多重继承,而又不会产生父类方法重名带来的麻烦的呢?
纳闷ing……

解决方案 »

  1.   

    刚才打错了 改一下
    interface a{
      int a=1;
      void f();
    }interface b{
      int a=2;
      void f();
    }class AB implements a,b{
       public static void main(String args[]){
           f();
       }
       public static void f(){
           System.out.println(a);
       }
    }
      

  2.   

    1.接口不能定义属性.
    2.接口没有具体实现.
    所以你说的f()调用的是谁无关紧要.而System.out.println(a)是从语法上不成立的.最后Java中接口不是设计用来多重继承的,至少这样理解比较好.
    从面向对象的角度讲,接口仅仅代表对一种能力或行为的约定,至于说利用它达到多重继承,这属于技巧问题.
      

  3.   

    那java到底有没有解决c++中解决不了的多重继承时方法或者属性重名的问题呢???还有,给orangemike更正一下,接口中当然可以定义属性,默认public final 类型而已
      

  4.   

    可以的。两个有相同方法的接口,被一个类实现是能行的,但是一般我们都会避免此种情况。
    另外实现方法不能你这样写。
    接口内的属性的属性声明如下:
    public static final *****
      

  5.   


    请具体说明如何实现两个含有相同变量名或者方法名的接口?另外,给你更正一下,public final是默认的,可以不写。  static 是可选的 ,当然也可以不写。
      

  6.   

    不是这样的,凡是定义的属性都是public static final
    只能声明常量。
      

  7.   

    接口不能有属性,所有楼主写的代码本身就有错误。方法名重复的只需要实现一个就可以了,至于调用的时候就更加不会存在问题了,随便使用哪个接口来调用都是调用这同一个方法的。这也是java和c++一个很大不同的地方。
      

  8.   

    这个问题 java1.5出来时就已经有办法解决了 只有做c#的还会担心
      

  9.   

    1.两个接口定义相同的方法,没有必要,画蛇添足
    2.可以通过编译,但是AB类只会实现一个方法。楼主多看看语法规范吧。package test;public interface A {
    public void test();
    }package test;public interface B {
    public void test();
    }package test;public class AB implements A, B { public void test() {

    }}
      

  10.   

    原来同名方法实现一个就够了,这一半问题解决了!
    但是,同名的属性,如果在类中被调用,还是会出错呀?!
    还有就是,属性不必须是static吧?!
      

  11.   

    17楼的说的是,
    1.两个接口定义相同的方法,没有必要,画蛇添足
    2.可以通过编译,但是AB类只会实现一个方法。 
    但是两个接口中相同的变量是编译不过的。变量不需要显示的定义为public static final ,默认的就是这样的。
    即:ina a  与public static final int a 是一样的。
      

  12.   

    package test;public interface A {
    int a=0;
    public void test();
    }package test;public interface B {
    int a=5;
    public void test();
    }package test;public class AB implements A, B { public void test() {

    } public static void main(String[] args){
    A a = new AB();
    System.out.println(a.a);//输出0

    B b = new AB();
    System.out.println(b.a);//输出5
    }
    }
      

  13.   

    接口可以定义属性啊,是static final类型的,其属性好像就是在其作用域中,不能实现给其子类
      

  14.   

    接口里面是可以定义属性的,但是要用static final 修饰;
    也就是 static final int a = 1;
    它是最终的,不能被修改的。