1.抽象类的定义与使用
1.1 抽象类的定义:
抽象类只是在普通类的基础上扩充了一些抽样方法而已,所谓的抽象方法指的是只声明而未实现的方法(即没有方法体)。所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的课也一定要用abstract关键字来定义,表示抽象类。
eg:定义一个抽象类
abstract class Person{
//属性
private String name;
//普通方法
public String getName(){
return this.name;
}
public void setName(String name) {
this.name = name;
}
//抽样方法
//{}为方法体,所有的抽象方法不包括方法体
public abstract void getPersonInfo();
}
观察代码发现,抽象类就是比普通类多了一些抽象方法而已。
抽象类中包含抽象方法,而抽象方法不包含方法体,即没有具体实现。因此,抽象类不能直接产生实例化对象。
1.2抽象类的使用原则:
- 所有抽象类必须有子类。
- 抽象类的子类必须覆写抽象类的所有抽象方法。(子类不是抽象类)
- 抽象类的对象可以通过对象多态性利用子类为其实例化。(子类向上转型可以为抽象类实例化对象)
- 抽象类一定不能用final声明,因为final声明的类不允许有子类;而抽象类必须有子类。
- 抽象类方法一定不能使用private定义,因为所有抽样方法必须被覆写。
- 抽象类也可以分为内部抽象类和外部抽象类。内部抽象类中也可以使用static定义来描述外部抽象类。
2.接口的定义与使用
抽象类与普通类相比,最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要求并避免单继承局限就需要使用接口。
2.1 接口的基本概念
接口定义:接口就是抽象方法和全局常量的集合,在Java中接口使用interface关键词定义。子类若想使用接口,就必须使用implements关键词来实现。并且,一个子类可以实现多个接口。
eg:一个简单地接口实现:
//为了区分接口,建议在所有的接口前面追加字母I
interface IMessage{
//全局常量
public static final String MSG = "I am a student";
//抽象方法
public abstract void print();
}
使用接口可以实现多继承的概念:对于接口的子类(不是抽象类)必须覆写接口中的全部抽象方法。随后可以利用子类的向上转型通过实例化子类来得到接口的实例化对象。
2.2 接口的使用限制
- 接口中只允许使用public权限。
- 当一个子类既需要实现接口,又需要继承抽象类时,要先使用extends继承一个抽象类,而后使用implements 实现多个接口。
- 一个抽象类可以使用implements 实现多个接口,但是接口不能继承抽象类。
- 一个接口可以使用extends 继承多个父接口。
- 接口可以定义一系列的内部结构,包括:内部普通类,内部接口。其中static定义的内部接口就相当于一个外部接口。
2.3接口的应用
接口在实际开发中有三大核心应用环境:
① 定义操作标准
②表示能力
③在分布式开发之中暴露远程服务方法
3.抽象类与接口的区别