根据课程图文做的笔记,供复习
1. 接口(引用数据类型:数组、类、接口)
1.1 接口的含义
接口(方法的集合)interface | 类 |
---|
抽象方法>JDK7 | 成员变量 | 默认方法和静态方法>8 | 构造方法 | 私有方法>9 | 成员方法 | 不能创建对象,可以被实现implements。实现接口的类可以看作接口的子类 | 可以创建对象,继承 |
实现接口的类必须实现接口的所有抽象方法 —> 创建该类对象,就可以调用方法 如果不实现接口的所有抽象方法 = 有方法没有函数体 = 有抽象方法 = 必须抽象类
1.2 接口的定义格式
public interface InterfaceDemo {
public abstract void abstractMethod();
public default void defaultMethod(){
System.out.println("1");
};
public static void staticMethod(){
System.out.println("2");
}
}
1.3 接口的实现
实现接口的类可以称为接口的实现类,也可以称为接口的子类
- 抽象方法
- 默认方法
- 可以直接调用也可以重写,但只能通过实现类的对象来调用
- 直接调用:实现类里面直接继承接口的方法,只需要创建实现类的对象调用就好
- 重写:实现类重写方法,创建的对象调用实现类的方法内容
- 静态方法
- 无法重写
- 与class文件相关,只能通过接口名调用
- 不可以通过实现类的类名和实现类的对象调用
- 私有方法:只有默认方法可以调用
- 私有静态方法:默认方法和静态方法可以调用
- 一般如果接口中有多个默认方法的内容重复,可以抽取出来封装到私有方法里面,供默认方法调用。
1.4 接口的多实现
- 一个类只能继承一个父类
- 一个类可以实现多个接口
- 一个类可以继承一个父类日,同时实现多个接口
- 抽象方法:
- 如果实现多个接口中有同名的多个抽象方法,在实现类中只需要重写一次
- 默认方法:
- 实现的接口里面有重名的默认方法时,必须重写此默认方法,只需要一次
- 没有重名,实现类都可继承调用
- 静态方法:
- 同名的静态方法并不冲突
- 只能通过接口名.静态方法名()调用
如果一个类继承的父类的成员方法和接口中默认方法 重名时,子类会就近选择执行父类的成员方法
1.5 接口的多继承
- 使用extends关键字,一个接口能继承另一个或者多个接口。
- 子接口继承父接口的方法,如果父接口的默认方法中有重名的,子接口需要重写一次
- 子接口重写默认方法时可以保留default关键字
- 子类重写默认方法时,不可以保留default关键字
2. 多态
2.1 定义
多态:同一行为,具有多种不同的表现形式 跑:慢跑、快跑 飞:有高有低,有快有慢,形态不同
2.2 多态的前提
- 继承或者实现
- 重写方法
- 父类引用指向子类对象
2.3 多态的形式体现
父类类型(接口/父类)变量名 = new 子类对象; 变量名.方法名(); 如Collection是List接口的父接口, ArrayList类实现了List接口
Collection<String> coll = new ArrayList<String>();
coll.add("小");
使用多态形式调用方法时,
- 先检查父类中是否有该方法,没有则编译错误
- 有的话,执行子类重写后的方法
2.4 多态的好处
父类类型接收子类对象,并把子类对象传递给方法。 当方法被执行时,多态规定执行子类重写的方法,所以一个方法可以代替多个方法,而且在子类增加时,这种方法也不用再次编写。
2.5 引用类型的转换
2.5.1 向上转型
多态本身:子类类型向父类类型向上转换,默认就是向上转型 向上转型:父类引用一个子类对象
2.5.2 向下转型
向下转型:父类类型向子类类型向下转换(强制) 已经向上转型的子类对象,将父类引用转为子类引用,使用强制类型转换
2.5.3 转型的原因
用多态方式调用方法时,首先检查父类是否有方法,也就是不能调用子类有父类没有的方法,会直接编译错误,无法运行。如果想要调用子类的特有方法,必须向下转型。
2.5.4 转型异常 instanceof
类型转换异常:创建了Cat类型对象,将它转换成Dog对象 。这两个类并没有什么继承关系,不可以类型转换
使用 instanceof 关键字,对引用变量做类型校验
|