抽象类和接口
2019-08-12 本文已影响0人
G_uest
抽象类特点
- 抽象类和抽象方法都需要使用abstract修饰
- 抽象类
abstract class test{}
。 - 抽象方法
public abstract void test();
。
- 抽象类
- 抽象类和抽象方法的关系
- 抽象方法所在的类必须是抽象类。
- 抽象类中未必一定有抽象方法。
- 抽象类不能实例化,要通过定义子类,由子类实现父类的全部抽象方法,才能创建对象。
- 子类通过 extends 关键字继承父类
class 子类名 extends 父类名{}
。 - 抽象类的子类
- 是一个抽象类,该类没有实现抽象类中的所有抽象方法。
- 是一个普通类,该类实现了抽象类中的所有抽象方法。
抽象类成员特点
- 成员变量:可以定义变量,也可以定义常量,但是不能被抽象。
- 构造方法:可以有,有无构造方法,不取决于是否可以创建对象,而是取决于是否可以定义成员变量。
- 成员方法:
- 可以是抽象方法,强制子类重写。
- 也可以是非抽象方法,用于给子类继承,提高代码复用性。
接口特点
- 使用interface关键字修饰(编译后为 .class文件)
interface name { 方法声明 }
。 - 接口中,只可以声明抽象方法。
- 子类通过 implement 关键字实现接口
class 类名 implement 接口名{ }
。 - 接口不能实例化,要通过定义实现类,实现接口中的所有抽象方法,才可以创建对象。
- 接口的实现类
- 是一个抽象类,该类没有实现接口中的所有抽象方法。
- 是一个普通类,该类实现了接口中的所有抽象方法。
接口中成员的特点
- 成员变量:只能是常量,不能是变量 默认加上
public static final
,建议手动加上。 - 构造方法:没有构造方法,接口中无法定义成员变量。实现类不去访问接口中的构造方法(访问也没有),而是父类的构造方法。
- 成员方法:只能是抽象方法,默认加上
public abstract
,建议手动加上。
类与类的关系
继承关系,使用extends关键字。可以单继承,不可以多继承,可以多层继承。
类与接口的关系
实现关系,使用implement关键字。可以单实现,也可以多实现,不能多层实现。
// 多实现
class 类名 implement 接口1, 接口2, 接口3...{
// 重写所有接口中的所有抽象方法
}
一个类可以继承一个类的情况下同时实现多个类
class 子类名 extends 父类名 implement 接口1, 接口2...{
// 重写父类和接口中的所有抽象方法
}
接口与接口的关系
继承关系,使用extends关键字。可以单继承,也可以多继承,可以多层继承
interface 接口名 extends 接口1, 接口2...{
}