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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿穆隆 中级黑马   /  2014-11-24 18:47  /  1052 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


着急上班只能发截图了。不会发代码呢还。。。

问题是:
final修饰的x不应该是变成常量吗?但为什么在子类中定义的时候还是能定义?final修饰的范围不应该只是一个类中吧?

但这个为什么能运行呢?而且还是以在子类中定义的出现。。。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

11 个回复

倒序浏览
局部变量只在局部发生作用,子类方法要干什么父类方法管不着
回复 使用道具 举报
两个x都是局部变量啊,子类中复写了work方法,所以在子类中work的内容与父类就完全不同了嘛。
ps:工资=age,工号=pay 看的我好凌乱啊:Q
回复 使用道具 举报
你说的在一个类中是private修饰符吧……
回复 使用道具 举报
final修饰得x 是一个 只能被赋值一次得量 ,但是 子类定义一个x 是变量两者 是不一样的  
回复 使用道具 举报
work方法用完生命周期就挂了~内存里就没X变量了~而且子类覆盖父类方法,y.work()压根就不会运行父类的work方法中的代码~
回复 使用道具 举报
huangkj 中级黑马 2014-11-24 22:33:32
7#
变量出了括号就出了作用域
回复 使用道具 举报
DamonZh 发表于 2014-11-24 21:13
两个x都是局部变量啊,子类中复写了work方法,所以在子类中work的内容与父类就完全不同了嘛。
ps:工资=age ...

所得寺内。。。。意思就是final的作用域只限于在定义局部变量就是在该局部内,定义的是类变量的话就是该类中被?还有至于这个凌乱就对了,我也很凌乱呢。。。着急上班没来得及改,想起这么个问题,改的原来一个程序。。。你看运行结果就可以了吗。。。
回复 使用道具 举报
楼主搞混淆了。只是被final修饰的函数不能被子类复写而已。被final修饰的变量就是常量,子类是可以重新定义的。
class A{final int var=1;}
class B extends A{final int var=2;}
A t1=new B();//t1.var等于1
B t2=new B();//t2.var等于2
A t3=new A();//t3.var等于1
B t4=new A();//不知道能不能编译通过,如果可以t4.var就等于1
此时,t1.var等于1,t2.var等于2。t3.var等于1。


回复 使用道具 举报
是静态变量, 不是常量~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马