关于修饰符final

时间:2021-07-18 21:04:32
判断题:如果类被标记为final,则它的方法也必须标记为final。

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

请问哪个是正确的呢?

10 个解决方案

#1


final类不能被继承    所以我认为final类中的所有成员方法都会被隐式地指定为final

#2


网上看到一个博客说可以利用反射机制获取属性和方法的修饰符,
然后结果显示,final修饰的类,其属性和方法不是被final修饰的。
大佬帮忙看看呢

https://www.cn去blog掉s.com文/yori字ckLi/p/6173710.html

#3


final是一个关键字,可以修饰类,变量,方法,
类:不能被继承
变量(属性和局部变量):不能被重新赋值
        在声明时赋值,或在构造器中赋值
        系统不会对final属性默认的赋初始值
方法:不能在子类中被覆盖,即不能修改

#4


不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。

#5


引用 4 楼 Bleating 的回复:
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

#6


1.final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。
这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。
 而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
  final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值
2.final修饰类中的方法
作用:可以被继承,但继承后不能被重写。
3.inal修饰类
作用:类不可以被继承

#7


其实吧 楼上说那么多 实践一下不就好了  测试代码如下:

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

        }

void method() {

         }

         final void method2() {

 }
}


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

关于修饰符final

显而易见并没有什么所谓的final类的成员方法就是final的   实践 > 一切

#8


Java 面向对象 之 final 关键字

http://www.verejava.com/?id=16992827836151

#9


引用 5 楼 Princar 的回复:
Quote: 引用 4 楼 Bleating 的回复:

不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持
不变,而且不可被覆盖或改写,就可以采取这种做法

#10


引用 5 楼 Princar 的回复:
Quote: 引用 4 楼 Bleating 的回复:

不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

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

所以,你想的没什么问题,被final修饰的类不需要被覆盖重写。

#1


final类不能被继承    所以我认为final类中的所有成员方法都会被隐式地指定为final

#2


网上看到一个博客说可以利用反射机制获取属性和方法的修饰符,
然后结果显示,final修饰的类,其属性和方法不是被final修饰的。
大佬帮忙看看呢

https://www.cn去blog掉s.com文/yori字ckLi/p/6173710.html

#3


final是一个关键字,可以修饰类,变量,方法,
类:不能被继承
变量(属性和局部变量):不能被重新赋值
        在声明时赋值,或在构造器中赋值
        系统不会对final属性默认的赋初始值
方法:不能在子类中被覆盖,即不能修改

#4


不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。

#5


引用 4 楼 Bleating 的回复:
不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

#6


1.final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。
这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。
 而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
  final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值
2.final修饰类中的方法
作用:可以被继承,但继承后不能被重写。
3.inal修饰类
作用:类不可以被继承

#7


其实吧 楼上说那么多 实践一下不就好了  测试代码如下:

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

        }

void method() {

         }

         final void method2() {

 }
}


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

关于修饰符final

显而易见并没有什么所谓的final类的成员方法就是final的   实践 > 一切

#8


Java 面向对象 之 final 关键字

http://www.verejava.com/?id=16992827836151

#9


引用 5 楼 Princar 的回复:
Quote: 引用 4 楼 Bleating 的回复:

不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持
不变,而且不可被覆盖或改写,就可以采取这种做法

#10


引用 5 楼 Princar 的回复:
Quote: 引用 4 楼 Bleating 的回复:

不是的吧,final修饰的类只是不能被继承,其中的方法和属性不一定是final。


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

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

所以,你想的没什么问题,被final修饰的类不需要被覆盖重写。