interface A
{
public static final int i =10;
void f();
}
class B implements A
{
int i = 111;
public void f()
{
System.out.printf("shlask");
}
}
public class C
{
public static void main(String[] args)
{
B bb = new B();
System.out.printf("%d\n",bb.i);
}
}
final是最种类,为什么运行后不报错,结果是111。
这里final没有修饰类哦,用来修饰了一个变量,变为常量。如果变量同名会出现覆盖的情况,所以输出11,而不是1他那篇博客也讲了,变量覆盖算是"半吊子"覆盖。实际上,那已经不是多态行为了回复<aclass='referer'target='_blank'>@kalo:http://blog.csdn.net/kuangxiang_panpan/article/details/7443046具体的,我也去了解一下相关文档,看一下如何去理解。回复<aclass='referer'target='_blank'>@kalo:如果父类、子类的属性名一致,子类会覆盖父类的同名属性(new子类名())回复<aclass='referer'target='_blank'>@kalo:啊,这不是覆盖吗??如果在类中的field和方法的变量名相同时,如果需要用到field,需要在前面加this.field,要不然就是使用方法里的变量。我国庆去看一个你说那本说变量名相同也不应该出现覆盖的情况吧?因为类的域没有多态行为,参考java编程思想4多态应该是111,而不是10你把interfaceA换成classA,然后去掉A中i变量的staticfinal修饰,重新运行一下,就会发现修改A为类之后,输出的仍然是111,为啥?因为类实例字段根本就不会出现像实例方法那样的多态行为!更何况A是接口呢另外,静态方法也不具备多态行为。因为静态方法是属于类的,不与单个对象关联,不存在动态绑定行为,在编译时即确定方法行为。接口中变量隐性的全部是staticfinal的,是属于整个接口,因此,也不应该具备多态行为。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。