关于一个常量赋值的问题

北渔。 2013-05-14 12:00:21
刚网上看了两个例子,我测试了下,运行正常,但是很不解

class ParentClass {
public static String staticField = "父类静态变量";
public final String finalField = "父类常量";
public static final String staticFinalField = "父类静态常量";
}
public class SubClass extends ParentClass {
public static String staticField = "子类静态变量";
public final String finalField = "子类常量";
public static final String staticFinalField = "子类静态常量";public static void main(String[] args) {
SubClass subClass = new SubClass();
System.out.println(SubClass.staticField);
// 注意,这里的subClass变量,不是SubClass类
System.out.println(subClass.finalField);
System.out.println(SubClass.staticFinalField);
}
}

运行结果如下:
1. 子类静态变量
2. 子类常量
3. 子类静态常量
在这里我很不理解,不是说一个变量给final修饰之后是不能再改变它的值吗,为什么子类可以呢,而且没有报错能运行?如果不是,那么父类和子类的两个常量finalField是不是不是同一个的?
...全文
204 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wandefajin 2013-05-14
  • 打赏
  • 举报
回复
变量不存在多态,你在谁中定义的就属于谁,楼主写的这种情况,其实是在子类中有保存了两个相同名称的变量,一个继承自父类,全程是super.变量名, 一个是自己定义的,全称是this.变量名 这样就不会存在命名冲突 并且当楼主创建子类的对象调用的时候,其实调用的是this.变量名,super.变量名没有被调用。
u010557116 2013-05-14
  • 打赏
  • 举报
回复
你不是重新在子类定义了一个同名的2个不同变量么?
  • 打赏
  • 举报
回复
在类的继承中,如果子类有和父类同类型以及同名的成员变量,则子类此时拥有两个名字相同的变量,一个继承自父类,另一个由子类定义。 当子类的对象产生时,同名的变量被各自分配不同的空间,互不干扰。Java中把这种行为称为“域的隐藏”。这一点和方法的f覆盖不太相同, 因为父类的方法被覆盖时,该方法在子类对象中就不复存在,子类对象中只能保留自身定义的方法。而父类的成员变量在子类中只是被隐藏,它 在子类对象中仍占有自己独立的内存空间。
Acesidonu 2013-05-14
  • 打赏
  • 举报
回复
方法才有多态

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧