黑马程序员技术交流社区

标题: 关于final的一个问题 [打印本页]

作者: 阿穆隆    时间: 2014-11-24 18:47
标题: 关于final的一个问题

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

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

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

作者: cs8630323    时间: 2014-11-24 21:02
局部变量只在局部发生作用,子类方法要干什么父类方法管不着
作者: DamonZh    时间: 2014-11-24 21:13
两个x都是局部变量啊,子类中复写了work方法,所以在子类中work的内容与父类就完全不同了嘛。
ps:工资=age,工号=pay 看的我好凌乱啊:Q
作者: 迷失的小Z    时间: 2014-11-24 22:04
你说的在一个类中是private修饰符吧……
作者: sunyeyu    时间: 2014-11-24 22:13
final修饰得x 是一个 只能被赋值一次得量 ,但是 子类定义一个x 是变量两者 是不一样的  
作者: Afridoce    时间: 2014-11-24 22:30
work方法用完生命周期就挂了~内存里就没X变量了~而且子类覆盖父类方法,y.work()压根就不会运行父类的work方法中的代码~
作者: huangkj    时间: 2014-11-24 22:33
变量出了括号就出了作用域
作者: 阿穆隆    时间: 2014-11-24 23:36
DamonZh 发表于 2014-11-24 21:13
两个x都是局部变量啊,子类中复写了work方法,所以在子类中work的内容与父类就完全不同了嘛。
ps:工资=age ...

所得寺内。。。。意思就是final的作用域只限于在定义局部变量就是在该局部内,定义的是类变量的话就是该类中被?还有至于这个凌乱就对了,我也很凌乱呢。。。着急上班没来得及改,想起这么个问题,改的原来一个程序。。。你看运行结果就可以了吗。。。
作者: as604049322    时间: 2014-12-1 21:39
楼主搞混淆了。只是被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。



作者: a371166028    时间: 2014-12-1 21:46
是静态变量, 不是常量~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2