一、方法覆写关键字——super
1 、super用于方法
《1》用于构造方法(重要)——super(参数列表)
当子类调用父类无参构造方法时,super()可写可不写;表示调用父类无参构造。
当子类调用父类有参构造方法时,super(参数列表)必须要写,要告诉编译器当前调用的是那个有参构造。
注意:
a. 子类构造方法中调用父类构造必须是第一行
b.this与super不能同时调用
《2》用于普通方法
用法:super.方法名(参数)
用于在子类中明确调用父类中被覆写的方法
2 、super用于属性(了解)
用法:super.属性名
表示调用父类中被覆写的属性,权限不是private
二、final修饰类(String类和8大基本数据类型的包装类,Integer)
当一个类被final修饰,表示该类不可以拥有子类(不允许有继承);
一旦一个类被final修饰,该类的所有方法都会默认加上final(成员变量不会加final)
《1》 final修饰方法
当一个方法被final修饰,明确表示该方法不允许被覆写
当一个方法被private修饰后,相当于加了一个final关键字
《2》 final修饰属性——常量
1.final修饰普通数据类型的成员变量(最主要的用途)
被final修饰的成员变量:
①必须在声明时初始化,并且初始化后值无法被修改;
②也可在构造块或构造方法中初始化
** 注意区分**
public final int a=10;(栈中)
public static int b=20;(全局数据区,共享)
final 变量——是常量,每个对象都有自己的final变量,在每个对象产生时初始化;
static final——全局变量,所有对象共享,在类加载时初始化,效率较高,通过类名调用
全局变量命名规范:
多个单词全大写,单词之间用_分隔
初始化全局变量方法:在静态代码块中初始化
2、final修饰引用数据类型的变量(值不能改变)
eg:class person{
}
public static void main(){
final person p=new person();//表示p指向的地址不可变,但类person的属性值等可变
}
3、final修饰的引用变量,数据类型也不可变
解析:出错的是——语句1,3,4
语句1——b1,b2都为int型,b3为byte可能丢失数据——错误
语句2——b1为int型,b4为byte切不可变,故不能提升为int,错误
语句3——同上