标题: 接口中定义属性的问题 [打印本页] 作者: 黑马高明辉 时间: 2012-7-20 20:03 标题: 接口中定义属性的问题 interface B {
public String a="StringB";
void shwo();
}
class A implements B{
@Override
public void shwo() {
System.out.println("this is from A.");
a = "sdfsdf";
}
}
这段程序会报错,据说是接口中定义属性的问题,定义的属性都可以是哪几种类型的?我试过了不能是private的,只能是public或者是缺省的哦。为什么接口中定义的属性不能在实现类中重新赋值?作者: 全海波 时间: 2012-7-20 20:24
interface B {
public String a="StringB";
void shwo();
}
class A implements B{
@Override
public void shwo() {
System.out.println("this is from A.");
a = "sdfsdf";
}
}
复制代码
我们知道,interface中的内容都必须是最大权限的,也就是说,必须用public修饰符修饰,而至于为什么?不能进行第二次赋值,你首先应该想到的是final关键字的作用,被fianl关键字修饰的属性,方法,是不能进行第二次赋值的(属性),而方法则不能覆盖
在这里final就派上了用场,在interface类中,属性的声明格式为:“public static final....”,当你在接口中定义属性没有加上前面我所说的格式时,系统会自动给你加上这种格式作者: 王贵朝 时间: 2012-7-20 20:34 接口中所有变量必须是 Public, Final, Abstract 因为你这样定义
interface B {
public String a="StringB";
void shwo();
}
在编译器中会默认替换为
interface B {
public abstract final String a="StringB";