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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Emperors 中级黑马   /  2014-4-14 23:12  /  1246 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java 中final型数据用法的一点疑问,求指教    谢谢

class x{
public final int a = 1;
}
class y extends x{
public final int a = 2;
}
x类中的a不是常量吗,怎么在子类中可以被重新定义和赋新值呢?
相对照,x中的public final方法在子类中不能重新定义
能讲下具体原因吗?谢谢

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
你 y中的a是重新定义的一个a,和你x中a并不是同一个a,所以这个不算是y对x类中a的赋新值,如果你在y中没有定义a而是直接给a赋值的话,这个是的a才是同一个a
class x{
public final int a = 1;
void show(){
  System.out.println(a);
}
}
class y extends x{
public final int a = 2;
void show1(){
   System.out.println(a);
}
}
class C
{
public static void main(String[] args){
     y yy=new y();
     y.show();   //输出结果1
     y.show1();  //输出结果2
  }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
ilvsoft 发表于 2014-4-14 23:32
你 y中的a是重新定义的一个a,和你x中a并不是同一个a,所以这个不算是y对x类中a的赋新值,如果你在y中没有 ...

哦哦  谢谢:)
回复 使用道具 举报
继承中如果父类的方法被final修饰了,子类可以继承但不可以复写,如果父类中属性被final 修饰了,子类也可以继承,记住属性没有复写这一说法,所以上面第二个变量a是子类自己的,虽然和父类的一模一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马