final为什么不能修饰构造器
时间: 2023-05-31 08:01:33 浏览: 386
在Java中,final关键字可以用来修饰类、方法和变量,但不能用来修饰构造器。这是因为构造器的作用是创建对象,在对象创建时,需要对对象的成员变量进行初始化,因此构造器的执行过程是不可变的,不能被覆盖或修改。因此,将构造器声明为final没有实际意义,也不符合构造器的使用目的。
相关问题
为什么不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法?
回答: abstract修饰符只能用于抽象类和抽象方法,不能用于属性、私有方法、构造器、静态方法和final的方法。这是因为abstract修饰符的作用是告诉编译器这个类或方法是抽象的,需要在子类中进行具体实现。属性和构造器是用来创建对象的,不需要进行具体实现,所以不能用abstract修饰。私有方法是只能在当前类中访问的方法,不需要在子类中进行具体实现,所以也不能用abstract修饰。静态方法是属于整个类的,不能操纵和处理属于某个对象的成员变量,只能处理属于整个类的成员变量,所以也不能用abstract修饰。而final的方法是不能被子类重写的方法,已经具有最终的功能和操作,不需要在子类中进行具体实现,所以也不能用abstract修饰。
#### 引用[.reference_title]
- *1* *3* [Java的接口、类、属性、方法的修饰符使用总结](https://blog.csdn.net/J080624/article/details/82225112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [Dart中的类——初始化列表、命名构造器、factory构造器、常量构造器、构造器私有化、get和set方法、枚举](https://blog.csdn.net/qq_26287435/article/details/88672299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
以下关于 Java 中 final 修饰符的说法中,哪一项是错误的? A. 用 final 关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值 B. 用 final 修饰的类是无法被继承的,且 final 类中的所有成员方法都会被隐式地指定为 final 方法 C. 用 final 修饰类的方法,则该方法所在的类不能被继承 D. 被 final 修饰的变量必须显示的初始化,初始化可以以三种方式:定义时初始化、在构造器中设置值、在非静态块中为 final 实例变量设置值
选项 B 中的说法是错误的。
A. 用 final 关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。这是正确的,final 修饰的变量是不可变的常量,只能赋值一次。
B. 用 final 修饰的类是无法被继承的,且 final 类中的所有成员方法都会被隐式地指定为 final 方法。这是错误的,final 修饰的类是无法被继承的,但 final 类中的成员方法并不会被隐式地指定为 final 方法,需要显式地使用 final 修饰符来指定方法为 final 方法。
C. 用 final 修饰类的方法,则该方法所在的类不能被继承。这是正确的,final 方法不能被子类重写,因此使用 final 修饰的方法所在的类不能被继承。
D. 被 final 修饰的变量必须显示的初始化,初始化可以以三种方式:定义时初始化、在构造器中设置值、在非静态块中为 final 实例变量设置值。这是正确的,final 变量必须在声明时就被初始化,可以在定义时初始化,也可以在构造器中设置值或在非静态块中为 final 实例变量设置值。
阅读全文