如果我有两个接口 
public interface MyInterface1{ 
public int a=1; 

public interface MyInterface2{ 
public int a=2; 
} class Test implements MyInterface1,MyInterface2{ 
} 在main中: 
Test t = new Test(); 
System.out.println(t.a);<----这里会出编译问题 在c++中可以通过虚拟继承来避免这种菱形继承的问题 我想问,在java中用什么办法避免?还是java提供了什么机制来避免?
如果有,上面代码怎么改???
谢谢

解决方案 »

  1.   

    首先在interface 里定义的变量都是static的,无论有没有用static关键字冲突的时候只能使用类名来引用了System.out.println(MyInterface1.a);
      

  2.   

    在c++中可以通过虚拟继承来避免这种菱形继承的问题 我想问,在java中用什么办法避免?还是java提供了什么机制来避免?
      

  3.   

    to baigy 
    为什么接口里的变量一定要是static的??
    谢谢
      

  4.   

    static表示静态方法,可以脱离类而实现,也就是说可以没有一个类的实例也能执行这个static方法,类似于一个全局方法。因此,static方法中的代码必须是可以单独拿出来执行的,如果要执行这个类中的非static方法,必须先实现一个这个类的实例。   
      

  5.   

    之所以使用static是因为接口不能被实例化,而如果这样的前提下还要使用其中的属性的话,就只有使用类属性,也就是static存在的原因了。
      

  6.   

    interface只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在interface中一般不定义数据成员).
    java摒弃多重继承,采用单继承和interface来实现,真是让程序员们抓狂。