文章目录
一、抽象
1. 抽象方法
由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。
2. 抽象类
一个类中如果包含抽象方法,该类应该用 abstract 关键字声明为抽象类。
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)。
- 抽象类不可以实例化
- 即使一个类中没有抽象方法,也可以将其定义为抽象类
- abstract 和 final 关键字不可以同时用于修饰一个类,因为 final 关键字使得类不可继承,而 abstract 修饰的类如果不可以继承将没有任何意义。
3. 抽象类的继承
一个类继承抽象类后,必须重写其抽象方法,不同的子类可以有不同的实现。
4. 抽象类的意义
- 为其子类提供一个公共的类型;
- 封装子类中的重复内容(成员变量和方法);
- 定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。
二、接口
1. 定义
接口可以看成是特殊的抽象类,即只包含有抽象方法的抽象类。
2. 接口的实现
一个类可以通过 implements 关键字“实现”接口,一个类实现了某个接口后必须实现该接口中定义的所有方法。
与继承不同,一个类可以实现多个接口,实现的接口直接用逗号分隔。当然,该类需要实现这些接口中定义的所有方法。
接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象,通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。
3. 接口的继承
接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接口继承了父接口中定义的所有方法。
三、多态
1. 定义
多态是同一个行为具有多个不同表现形式或形态的能力。在程序中表现为同一个引用类型,使用不同的实例而执行不同操作,即父类引用,子类对象。
2. 多态的意义
- 一个类型的引用在指向不同的对象时会有不同的实现
- 同样一个对象,造型成不同的类型时,会有不同的功能
3. 使用多态实现思路
- 编写父类
- 编写子类,子类重写父类方法
- 运行时,使用父类的类型,子类的对象
实现多态的两个要素:方法重写、使用父类类型。
4. 向上造型
一个类的对象可以向上造型的类型有:
- 父类的类型
- 其实现的接口类型
Java编译器根据类型检查调用方法是否匹配。
5. 强制转型
- 可以通过强制转换将父类型变量转换为子类型变量,前提是该变量指向的对象确实是该子类类型。
- 也可通过强制转换将变量转换为某种接口类型,前提是该变量指向的对象确实实现了某接口。
如果在强制转换过程中出现违背了上述两个前提,将会抛出 ClassCastException 。
6. instanceof 关键字
6.1 用法
对象 instanceof 类或接口
6.2 作用
该关键字用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false。