一.super关键字
背景: 当子类重写了父类方法后,子类对象无法再去访问父类被重写的方法,因此,引入了super关键字来访问父类的成员
key: 以父之名
(1)super调用 父类的成员变量,成员方法
super.成员变量名;
super.成员方法名([参数]);
(2)子类调用父类的构造方法
子类构造函数名(参数){
super([参数]);
}
super就指代了父类构造函数名
注意事项: ① super调用构造方法时,必须写在子类构造方法的第一行
②用super在子类中调用父类构造函数时,要指定(就是给出参数)调用父类的哪个方法 , 如果不指定 ,那就会默认调用父类的无参的构造方法 , 但如果父类恰巧又没写无参的构造函数时 此时系统就会报错
Tips: 所以一般我们在写类的构造函数时,都会写两个以上构造函数 ,其中一个要是显式的无参构造函数
二.final关键字
修饰类: 不能被继承
修饰变量: 值不可被修改
修饰方法: 不可被重写
三.抽象类
我们在定义一个类时,有时是无法预知这个类的方法到底该如何实现的 , 这个时候 , 就可以把这个类或类的方法用 abstract关键字修饰 , 这时 , 就有了抽象类与抽象方法
抽象类表示的是一种共性关系,它的子类必须都有抽象类的某种特点
例如: 有一个父类,有Fly方法, 那它的子类飞机类和鸟类,都具有Fly的方法(行为)
(1)用abstract修饰类
特点: 不可以被实例化
(2)用abstract修饰的方法
如果一个类中的某个方法用abstract修饰了 ,那么:
① 方法体不能出现 , 也就是在该抽象类中不能被实现
② 这个类就是抽象类了
③ 抽象类的子类,如果不是抽象类,那么这个子类就必须重写它的抽象类父类的方法
即: 非抽象类子类必须重写其抽象类父类的方法
四.接口
接口的所有方法都是抽象的 . 是一种纯抽象类 .
接口表示一种"特性关系" , 某些子类要实现父类不具备的某种行为
举个例子: 哺乳动物为父类 , 下面派生出蝙蝠这个子类 , 蝙蝠会飞 , 但不是所有哺乳动物都会飞 , 这个时候 , 我们就可以给出一个接口 , 接口中写出抽象的"飞"方法 , 然后再在子类蝙蝠中实现这个方法.
接口特点:
①在JDK8中的新特性 : 不仅可以包含抽象的方法,也可以包含常量 ,static方法 和 default方法(default关键字必须写上)
后两者允许有方法体 常量必须初始化
②接口需要有一个实现类 , 在这个实现类中必须实现接口中的所有抽象方法
③ 一个抽象类在实现接口时 , 可以部分实现接口中的方法
④ 接口和接口之间可以相互继承
⑤如果类的继承和接口的实现要在同一个类中实现 , 那么extends 关键字要写在implements关键字的前面,而且不能用逗号隔开
接口中方法的实现 : implements关键字
[修饰符]class 类名 [extends 父类名] [implements 接口1,接口2,...]{
实现接口中的方法;
}