Java进阶——Attention Day 4
OOP最后几个注意点。
1、final关键字
-
final关键字修饰的成员变量不可改变
-
final修饰成员变量有两种初始化方式
- 声明同时初始化
- 构造函数中初始化
-
final关键字也可以修饰局部变量,在使用之前初始化即可
-
final修饰的类不能被继承
NOTE:使用一个不能被继承的类意义:可以保护类不能修改继承,可以控制滥用继承对系统造成的伤害。
2、多态
多态是同一个行为具有不同的表现形式或形态的能力。
多态的存在条件:
- 继承或实现:在多态中必须存在有继承或实现关系的子类和父类
- 方法的重写:子类对父类中的某些方法进行重新定义(重写)
- 父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型
父类类型 引用名 = new 子类类型();
然后通过 变量名.方法名()调用在子类中重写的方法。
多态的特点:
- 多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量
- 多态情况下,子父类存在同名的非静态成员方法时,访问的是子类中重写的方法
- 多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员函数
- 多态情况下,不能访问子类独有的属性和方法
3、向上转型&向下转型
向上转型:
//向上转型就是java多态的表现形式
//父类引用指向子类对象
//格式:
父类类型 引用名 = new 子类类型();
向下转型:
//向下转型的前提:必须是多态形式
//向下转型是父类向子类转换的过程,这个过程需要强制转换
//格式:
父类类型 father = new 子类类型();
子类类型 变量名 = (子类类型 )father;
NOTE:向下转型后,可以调用子类独有的属性和方法
4、抽象类
由abstract修饰的类叫做抽象类
由abstract修饰的方法为抽象方法,抽象方法只有方法的定义, 没有方法体实现,用一个分号结尾;
一个类中如果包含抽象方法,该类应该用abstract关键字声明为抽象类;
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)
普通类能写的内容抽象类也可以,比如成员变量,普通方法
抽象类可以写抽象方法,但是不一定要有抽象方法
抽象类不能自己实例化:
抽象类就是要给别的类去继承的,抽象类可以继承另外一个抽象类的
- 当子类继承一个抽象类时,如果子类是一个普通类且父类有抽象方法,那么子类必须得实现父类的抽象方法,对于父类的普通方法,子类可以不重写。
- 当一个抽象类继承另外一个抽象类时,这个抽象类可以选择重写父类的抽象方法,如果不重写,则需要后面的子类去重写。
抽象类继承抽象类:
抽象类继承抽象类,子类可以不重写父类的抽象方法。普通类继承抽象类后,如果抽象类已经实现了其父类的某些抽象方法,普通类可以不重写已经被实现的抽象方法。
5、接口
接口:更为抽象的抽象类,接口里只允许定义常量和抽象方法。
用interface创建接口:
public interface MyInterface {//接口使用interface表示,本质上还是一个抽象类
//接口中默认只允许定义常量和抽象方法
static final int id=123;//接口中的常量默认使用static final修饰
public abstract void hello();//接口中的方法默认使用public abstract修饰的 public
abstract可以省略
void world();
int add();
}
接口实现:
用implements去实现一个接口,实现类后缀使用Impl。
public class MyInterfaceImpl implements MyInterface{//通过implements关键字实现一个接
口,需要重写接口中所有的抽象方法
@Override
public void hello() {
System.out.println("hello");
}
总结
接口多继承
@Override
public void world() {
System.out.println("world");
}
@Override
public int add() {
return 10;
}
}
总结:
- 接口:接口中只允许定义常量和抽象方法
- 接口中定义的变量默认使用static final修饰,所以static final可以省略
- 接口中定义的方法默认使用public abstract修饰,所以public abstract可以省略
- 接口不能实例化自己,只能通过子类对象访问方法
- 一个类可以同时实现多个接口 使用逗号隔开,子类需要重写所有接口中的抽象方法
- 一个接口可以继承多个接口,使用逗号隔开
PS:如有不足,敬请指正!😺
努力是很辛苦,不努力是很舒服,可是不快乐。