黑马程序员技术交流社区

标题: 为什么说interface中只能定义static final变量 [打印本页]

作者: 崔政    时间: 2012-12-8 11:50
标题: 为什么说interface中只能定义static final变量
如题,我很是不理解。我自己写了个小例子,感觉不用static final修饰,照样可以访问到啊?求解释
  1. public class AbstractAndInterface {
  2.         public static void main(String[] args) {
  3.                 MyIn my=new MyIn();
  4.                 my.chouxiang();
  5.         }
  6. }
  7. interface in{
  8.         public int i=3;
  9.         public void chouxiang();
  10. }
  11. class MyIn implements in{

  12.         public void chouxiang() {
  13.                 // TODO Auto-generated method stub
  14.                 System.out.println(i);
  15.         }
  16.        
  17. }
复制代码

作者: 邵新瑜    时间: 2012-12-8 11:58
接口的所有成员都应该公开,所以是 public
接口不能实例化,所以只有静态成员: static
接口的成员一定应该是常量,所以是 final。


作者: 但汉涛    时间: 2012-12-8 12:21
接口成员可以不定义成静态常量,效果和静态常量一样。
interface都是高度抽象但不实现任何具体方法的,而抽象类可以有具体方法存在,所以interface所需要定义的都是一些常量,用final static修饰。
如果有一般的成员变量那就没有意义了~~~
作者: 奋斗的青春    时间: 2012-12-8 16:01
本帖最后由 吴愿涛 于 2012-12-8 16:08 编辑

楼主所说的访问是可以的,但是你要是想在实现它的类class MyIn中改变接口中定义的变量的值就是不可以了 ,因为它默认就被final修饰 ,因为你的class MyIn类实现了接口Interface in所以该接口中的静态变量int i你自然就可以访问到, 因为被static修饰的变量都是类变量 ,类变量被该类内部和引用该类的对象所共享。
记住,接口只不过是一种特殊的抽象类而已, 既然都是类就有着类的共性。

作者: 惠晖    时间: 2012-12-8 21:34
可以这么写, 但是虚拟机自动帮你加了你没写的 static  跟 final   你这种只是省略写法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2