Java学习笔记63——final关键字
2021/12/11 1:18:35
本文主要是介绍Java学习笔记63——final关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
final关键字
我们如果说父类的东西不想让子类去继承:
可以使用private修饰或者static
由于继承方法中有一个现象:方法重写
所以,当方法可以被重写的时候,父类原本的方法还在,但是调用是子类重写后的
方法,如果我依旧想保留父类原本的方法,不想让子类重写,但是呢,我想让子类去用
针对于这样的情况,java提供了一个关键字:final
定义
final: 最终的意思,不可以改变的意思。
使用格式
一般情况下,把final放在访问权限修饰与返回值之间
常见的情况下,final不仅可以修饰成员方法,也可以修饰类,变量
class Father4{ //被final修饰的成员方法,不能被子类重写。 public final void fun(){ System.out.println("这是父类的fun方法"); } } class Son4 extends Father4{ // public void fun(){ // System.out.println("这是父类的fun方法"); // } } public class ExtendsDemo6 { public static void main(String[] args) { } }
final:最终的意思,它可以修饰变量,类,方法
特点:
1、被final所修饰的类无法被其他类所继承
//被final修饰的类不能被继承 final class Fu1{ } class Zi1 extends Fu1{ } public class FinalDemo1 { public static void main(String[] args) { } }
2、被final修饰的方法,子类无法重写,但是在同一个类中可以出现同名不同参数列表的被final修饰的方法,这是重载
class Fu1{ public final void fun1(){ System.out.println("这是父类中的fun1方法"); } public final void fun1(String s){ System.out.println("这是父类中的fun1方法"); } }
总结一句话:被final修饰的方法不能被重写,但是可以被重载
3、被final修饰的变量变成了常量,无法再重新分配值。
class Fu1{ public final void fun1(){ System.out.println("这是父类中的fun1方法"); } public final void fun1(String s){ System.out.println("这是父类中的fun1方法"); } } class Zi1 extends Fu1{ final int a=10; //被final修饰的变量变成了常量,无法再重新分配值。 public void fun2(){ System.out.println("a:"+a); } } public class FinalDemo1 { public static void main(String[] args) { Zi1 zi1 = new Zi1(); zi1.fun2(); zi1.a=200; zi1.fun2();//报错 } }
常量:
A: 字面值常量:
10,12.34,"hello",'a',true
B: 自定义常量
其实就是被final修饰的变量。
final int a = 10;
注意:被final修饰变量,只要在构造方法完毕之前赋值就可以了。下面是两种赋值途径
class Fu2{ final int b; Fu2(){ b = 30;//构造方法完毕前赋值 System.out.println(b); } } public class FinalDemo3 { public static void main(String[] args) { } }
class Fu2{ final int b; { b = 100;//构造代码块赋值 } Fu2(){ System.out.println(b); } } public class FinalDemo3 { public static void main(String[] args) { } }
4、被final修饰的局部变量是基本数据类型的时候,不可以修改值
public class FinalDemo2 { public static void main(String[] args) { int a=10; System.out.println(a); a=100; System.out.println(a); final int b=20; System.out.println(b); b=200;//b被final修饰,所以不可以重新赋值 System.out.println(b);//报错 } }
5、被final修饰的局部变量是引用数据类型的时候,该对象的地址值是无法改变的, 但是引用堆内存中的变量是可以发生改变。
class Student { int age = 18; } public class FinalDemo2 { public static void main(String[] args) { Student s1 = new Student(); System.out.println(s1.age); final Student s2 = new Student(); System.out.println(s2.age); //s2 = s1;报错。被final修饰的局部变量s2是引用数据类型,地址值无法改变 s2.age = 20;//age并没有被final修饰,所以可以改变 System.out.println(s2.age); } }
这篇关于Java学习笔记63——final关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现