关于修饰符final

Princar 2018-09-14 02:53:58
判断题:如果类被标记为final,则它的方法也必须标记为final。

百度知道上搜到一个答案:final类中的所有成员方法都会被隐式地指定为final方法。
博客园看到一个结论:final定义的类,其中的属性、方法不是final的。

请问哪个是正确的呢?
...全文
333 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
MASTER-松哥 2018-09-15
  • 打赏
  • 举报
回复
1.final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。
这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。
而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值
2.final修饰类中的方法
作用:可以被继承,但继承后不能被重写。
3.inal修饰类
作用:类不可以被继承
老飞侠yll 2018-09-15
  • 打赏
  • 举报
回复
引用 5 楼 Princar 的回复:
[quote=引用 4 楼 Bleating 的回复:]
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


其实我有个疑问,既然final修饰的类不能被继承,那就不可能有子类,那final类中的方法应该也没办法被覆盖的吧?(其实也就相当于final类中的方法也有final修饰?)不知道可以这么理解吗。。。

[/quote]当你将final用于类身上时,一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要
进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final
类中的方法加上一个final,但这显然没有意义。

所以,你想的没什么问题,被final修饰的类不需要被覆盖重写。
老飞侠yll 2018-09-15
  • 打赏
  • 举报
回复
引用 5 楼 Princar 的回复:
[quote=引用 4 楼 Bleating 的回复:]
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


其实我有个疑问,既然final修饰的类不能被继承,那就不可能有子类,那final类中的方法应该也没办法被覆盖的吧?(其实也就相当于final类中的方法也有final修饰?)不知道可以这么理解吗。。。

[/quote]之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持
不变,而且不可被覆盖或改写,就可以采取这种做法
verejava 2018-09-15
  • 打赏
  • 举报
回复
Java 面向对象 之 final 关键字

http://www.verejava.com/?id=16992827836151
Surrin1999 2018-09-15
  • 打赏
  • 举报
回复
其实吧 楼上说那么多 实践一下不就好了 测试代码如下:

public final class Final {
public static void main(String args[]) {

}

void method() {

}

final void method2() {

}
}


不知道为什么显示出来不对齐。。不过这不是重点 我们反编译一下class文件



显而易见并没有什么所谓的final类的成员方法就是final的 实践 > 一切
Princar 2018-09-14
  • 打赏
  • 举报
回复
引用 4 楼 Bleating 的回复:
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


其实我有个疑问,既然final修饰的类不能被继承,那就不可能有子类,那final类中的方法应该也没办法被覆盖的吧?(其实也就相当于final类中的方法也有final修饰?)不知道可以这么理解吗。。。

老飞侠yll 2018-09-14
  • 打赏
  • 举报
回复
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。
sails_z 2018-09-14
  • 打赏
  • 举报
回复
final是一个关键字,可以修饰类,变量,方法,
类:不能被继承
变量(属性和局部变量):不能被重新赋值
在声明时赋值,或在构造器中赋值
系统不会对final属性默认的赋初始值
方法:不能在子类中被覆盖,即不能修改
Princar 2018-09-14
  • 打赏
  • 举报
回复
网上看到一个博客说可以利用反射机制获取属性和方法的修饰符,
然后结果显示,final修饰的类,其属性和方法不是被final修饰的。
大佬帮忙看看呢

https://www.cn去blog掉s.com文/yori字ckLi/p/6173710.html
bcsflilong 2018-09-14
  • 打赏
  • 举报
回复
final类不能被继承 所以我认为final类中的所有成员方法都会被隐式地指定为final

62,628

社区成员

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

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