A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔政 中级黑马   /  2012-12-8 11:50  /  2015 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,我很是不理解。我自己写了个小例子,感觉不用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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
接口的所有成员都应该公开,所以是 public
接口不能实例化,所以只有静态成员: static
接口的成员一定应该是常量,所以是 final。

回复 使用道具 举报
接口成员可以不定义成静态常量,效果和静态常量一样。
interface都是高度抽象但不实现任何具体方法的,而抽象类可以有具体方法存在,所以interface所需要定义的都是一些常量,用final static修饰。
如果有一般的成员变量那就没有意义了~~~

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-12-8 16:08 编辑

楼主所说的访问是可以的,但是你要是想在实现它的类class MyIn中改变接口中定义的变量的值就是不可以了 ,因为它默认就被final修饰 ,因为你的class MyIn类实现了接口Interface in所以该接口中的静态变量int i你自然就可以访问到, 因为被static修饰的变量都是类变量 ,类变量被该类内部和引用该类的对象所共享。
记住,接口只不过是一种特殊的抽象类而已, 既然都是类就有着类的共性。
回复 使用道具 举报
可以这么写, 但是虚拟机自动帮你加了你没写的 static  跟 final   你这种只是省略写法

点评

嗯,又看了一遍视频,是可以这么写。。。  发表于 2012-12-8 22:27
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马