1.多态
1.1 概述
概念: 所谓的多态,指的就是"多种形态",简单来说,就是"一种事物,在不同的环境下,表现出不同的状态".
特点:
1.有继承或实现关系(多态的前提).
2.有方法重写(多态的意义)
3.有父类或父接口引用指向子类对象(多态的核心)
1.2 访问
访问成员变量: 编译看左边(父类),运行看左边(父类)
访问成员方法: 编译看左边(父类),运行看右边(子类)
1.3 优缺点
优点: 提高了代码的扩展性(把父类当作方法的参数,调用方法时,可以传递任意的子类).
缺点: 不能使用子类特有的功能.
1.4 转型
向上转型: 其实就是自动类型转换,一般是"父类引用指向子类对象".
向下转型: 其实就是强制类型转换.一般是"把父类引用转为子类引用"
1.5 instanceof
格式: boolean result = 对象 instanceof 类型;
运算:
如果"对象"是该"类型"的对象,则返回true.
如果"对象"不是该"类型"的对象,则返回false.
2.抽象
2.1 概述
概述: 抽象在Java中使用abstract表示,abstract关键字可以修饰"方法,类".
概念:
被abstarct修饰的类,被称之为抽象类.
被abstarct修饰的方法,被称之为抽象方法.
语法格式:
public abstract class 类名 {}
2.2 特点
抽象类:
1.抽象类不能实例化.
2.抽象类的子类,必须重写抽象类中的所有抽象方法,除非子类也是抽象类.
抽象方法:
1.抽象方法所在类必须是抽象类
2.抽象方法可以看作是一种规则,子类必须重写
3.接口
3.1 概述
概述: 接口是一种比抽象类更加抽象的类层次的结构,定义的一种规范. 语法:
定义接口: public interface 接口名{}
实现接口: public class 子类 implements 接口名{}
3.2 注意
1.实现接口的子类,必须重写接口中的所有抽象方法.除非子类也是抽象的.
2.类和接口的关系是实现关系,使用implements关键字实现.
3.3 成员
变量: 只能是静态常量.默认修饰符是 public static final
方法: 只能是抽象方法.默认修饰符是 public abstract
构造: 没有构造方法.
4.相关扩展
4.1 类和接口关系
类和类之间: 继承关系,只能单继承,不能多继承,但可以多层继承.
类和接口之间: 实现关系,可以单实现,也可以多实现,还可以在继承的同时实现接口.
接口和接口之间: 继承关系,可以单继承,也可以多继承.
4.2 接口和抽象类
内容:
抽象类: 成员变量,成员方法,构造方法,静态常量,抽象方法
接口: 静态常量,抽象方法.
意义:
抽象类: 抽象类是一个类,定义的是一个类别.抽取的是子类的共有内容.
接口: 接口不是类,抽取的是"共有的功能/规则"
场景:
抽象类: 如果类中包含抽象方法,则该类定义为抽象类.
接口: 如果类中只有抽象方法,则该类就可以变成接口
4.3 接口新特性
① 默认方法
格式:
public default void 方法名(){
方法体
}
作用:
子类可以重写该方法,子类也可以不重写该方法.
注意:
JDK8之后才能用.
② 静态方法
格式:
public static void 方法名(){
方法体
}
作用:
可以直接通过"接口名.方法"来调用.
注意:
JDK8之后才能用.不建议使用.
③ 私有方法
格式:
private void 方法名(){ 方法体 }
private static void 方法名(){ 方法体 }
作用:
静态私有方法是抽取"静态方法的公共部分". 非静态私有方法是抽取"默认方法的 "
注意:
JDK9之后才能用.不建议使用.