public class TestInterface implements a1,a2{
public static void main(String args[]) {
TestInterface t =new TestInterface();
System.out.println(j);
                  //System.out.println(i);
}
}interface  a1 { 
int i = 1;

}interface a2 {
int j = 2;
//int i = 3;
}
接口中的常量都是 public static finally
java这样做是为了解决C++多继承中同名变量产生的问题,可是如果我把注释去掉,编译通过,语法是没有问题的,可是,这样还是没有解决C++多继承的问题啊,如果要输出i,那还是会出问题,我想问问java中申明的接口类型中常量都是public static finally有什么用?

解决方案 »

  1.   

    人家就是想告诉你先想清楚自己到底要干什么,然后再把那些东西放到 interface 里面去,没想清楚谁会用到这些东西的时候,就把这个东西放在自家后院里,不要到处张贴。所以,一般我们对于非全局设计中已经考虑到要共用的东西,先不要让其它人看到它,比如,我们放在一个类中,把它设置成包内可见,放在 interface 中的东西表示任何人都应该公平地使用它,不能因为 A 有 2 而 B 有 3 而出现不平等的问题,出现这现象那就说明不应该把 i 放到 interface 里面。
      

  2.   

    我看到有些人因为看到很多常量都在 InterfaceA.java 里面,就让一个跟这个 InterfaceA 不是完全吻合的类来实现这个 InterfaceA 接口,这样的话,以后就到这些常量时就直接写常量名不用加前面的 InterfaceA. 这样的前缀,这种做法是很笨的,他们以为开发的效率是通过减少敲击键盘的次数来提高的,那就是很严重的问题。效率和可重用性是通过把功能先分解成基本的组件,然后根据业务逻辑来装配不同的组件,而不是先装配很多功能的肥胖的组件并在里面用一大堆的条件控制它的细节却不提供一个基本的元件,让其它的客户发现需要略有不同的时候又去改动它并新增一个条件参数来控制,后面的这种做法让你一个本来在 2.0 版本工作的很好的东西到了 6.0 的时候很难维护。
      

  3.   

    interface里面涉及的常理是public static final的,因为接口会被其他各种类型的类去实现,会用到里面公用的变量,不允许其他类擅自进行更改,否则乱套了。
      

  4.   

    标识符可以是以字母、下划线开头,后面允许字母、数字、下划线,以及允许 Unicode 字符。有这么多的选择,为什么要弄一样的名字?
      

  5.   

    是不可以改,但是同名的变量始终不能有效的避免,java与c++相比好像体现不出他这一改变的优势
      

  6.   

    打个比方好了interface象一个公共资源,谁都可能应用它,谁都不知道谁可能应用它。
    因此设计它的时候就必须考虑到这一点,并且让应用它的类之间不会出现冲突。如果interface中的变量不是static final,它就可能被任何一个应用它的类改变,这时,其它应用它的类就可能取到错误的值。谁来为它们负责?可以把它假想为图书馆的一本书,任何人都可以借出它,阅读它。但任何人都不能在上面涂改,这是为了所有读者的利益。