黑马程序员技术交流社区
标题:
为什么说interface中只能定义static final变量
[打印本页]
作者:
崔政
时间:
2012-12-8 11:50
标题:
为什么说interface中只能定义static final变量
如题,我很是不理解。我自己写了个小例子,感觉不用static final修饰,照样可以访问到啊?求解释
public class AbstractAndInterface {
public static void main(String[] args) {
MyIn my=new MyIn();
my.chouxiang();
}
}
interface in{
public int i=3;
public void chouxiang();
}
class MyIn implements in{
public void chouxiang() {
// TODO Auto-generated method stub
System.out.println(i);
}
}
复制代码
作者:
邵新瑜
时间:
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