Java中super关键字
super 可以理解为是指向自己父(超)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
super关键字的作用:
- 调用父类的构造方法
- 调用父类的成员方法
注意:
1、super只能应用在成员方法和构造方法中,不能应用在静态方法中(和this是一样的),如果在构造方法中使用super,必须放在方法的第一行。
2、构造方法不存在覆盖的概念,构造方法可以重载。
3、关于构造方法的执行顺序:先执行父类的再执行子类的,必须完成父类的所有初始化,才能创建子类。
4、程序运行时机优先级是:类加载-->静态代码块运行-->静态变量初始化-->对应的构造函数运行
为什么会有super关键字
- 因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类,没有父,也就没有子
- 有时候需要在子类中,显示的调用父类的成员方法和父类的构造方法。
- 子类中即使我们没有显示的调用父类的无参构造方法,那么它也会默认使用
super()
调用父类的无参构造方法,此种情况下子类如果显示的设置了有参构造器,必须显示设置无参构造器,否则编译时将会失败。
super和this在构造方法中的使用:
- super(参数):调用父类中的某一个构造函数(必须为构造函数中的第一行)。
- this(参数):调用本类中的构造函数(必须为构造函数中的第一行)。
Java中final关键字
final表示不可改变的含义
final关键字
使用总结:
-
使用final关键字修饰的类不能被继承
-
使用final关键字修饰的方法不能被覆盖(重写)
-
使用final关键字修饰的变量,在使用前必须显示初始化。对于final修饰的成员变量,我们有且只有两个地方可以给它赋值,一个是声明该成员时赋值,另一个是在构造方法中赋值,在这两个地方我们必须给它们赋初始值。
-
使用final关键字修饰的变量(基本类型)一旦赋值,不能被改变。如果使用final关键字修饰的引用类型,那么这个引用只能指向一个对象,也就是说这个引用不能通过 ** new对象** 方式再次赋值,但被指向的对象中属性值是可以修改的
private static final Integer number = 6666; public void addNumber(){ //number不能进行修改,因为number使用final修饰了,变量(基本类型)一旦被赋值,就不能被改变 number = 8888; } final Person person = new Person(); person.name = "张三"; System.out.println(person.name); //再次new创建新对象引用时,不能编译通过 //person引用使用final修饰,限制了person指向堆区中的内存地址不能被修改(也就是person只能指向堆中唯一一个对象),但是,person指向的对象的属性值是可以修改的 person = new Person();
-
构造方法不能被final修饰
-
会影响Java类的初始化,final定义的静态变量调用时不会执行java的类初始化方法,也就是说不会执行static代码块等相关语句,这是由java虚拟机规定的。
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!
给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!