面向对象相关知识及多态
一、抽象类
抽象类概述及定义
抽象方法:将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑 无法在父类中给出具体明确,该方法就可以定义为抽象方法。
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);
注意事项:
-
抽象类不能实例化
-
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
-
可以有构造方法
-
抽象类的子类
- 要么重写抽象类中的所有抽象方法
- 要么是抽象类
二、接口
2.1 接口的概述及定义
当一个类中的所有方法都是抽象方法的时候,我们就可以将其定义为接口 接口也是一种引用数据类型,它比抽象类还要抽象
接口存在的两个重要意义
- 规则的定义
- 程序的扩展性
接口用关键字interface来定义 public interface 接口名 {}
2.2 特点
-
接口和类之间是实现关系,通过implements关键字表示 public class 类名 implements 接口名 {}
【注意:】接口和类的实现关系,可以单实现,也可以多实现。 public class 类名 implements 接口名1 , 接口名2 {}
-
接口不能实例化
-
接口的子类(实现类)
要么重写接口中的所有抽象方法 要么是抽象类
2.3 接口中成员的特点
成员变量只能是常量
默认修饰符:public static final 构造方法 没有构造方法 成员方法 只能是抽象方法 默认修饰符:public abstract
JDK8版中接口成员的特点
JDK8版本后 1、允许在接口中定义非抽象方法,但是需要使用关键字 default 修饰,这些方法就是默认方法 作用:解决接口升级的问题
2、接口中允许定义static静态方法
接口中默认方法的定义格式: 格式:public default 返回值类型 方法名(参数列表) { } 范例:public default void show() { }
接口中默认方法的注意事项:
- 默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
- public可以省略,default不能省略
- 如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写
接口中静态方法的定义格式: 格式:public static 返回值类型 方法名(参数列表) { } 范例:public static void show() { }
接口中静态方法的注意事项:
静态方法只能通过接口名调用,不能通过实现类名或者对象名调用 public可以省略,static不能省略
2.4 类和接口的关系
- 类和类的关系 继承关系,只能单继承,但是可以多层继承
- 类和接口的关系 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口和接口的关系 继承关系,可以单继承,也可以多继承
三、多态
-
什么是多态
同一个对象,在不同时刻表现出来的不同形态
-
多态的前提
- 要有继承或实现关系
- 要有方法的重写
- 要有父类引用指向子类对象
3.1 成员访问特点
构造方法:同继承一样,子类会通过 super 访问父类构造方法
成员变量:编译看左边(父类),执行看左边(父类)
成员方法:编译看左边(父类),执行看右边(子类)
3.2 好处和弊端
-
好处
提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
-
弊端
不能使用子类的特有成员
3.3 转型
-
向上转型 从子到父 父类引用指向子类对象
-
向下转型 从父到子 父类引用转为子类对象
格式:子类型 对象名 = (子类型)父类引用;