接口与类
一.接口 interface
Ⅰ. 概念
java中类是单继承的,程序的灵活性、扩展性都受到了影响.为了弥补单继承的缺点,java提供了接口来扩展类;
Ⅱ. 定义
格式:interface 接口名{}
Ⅲ. 特点
- 接口中可以定义成员属性,必须是静态常量,需要通过public static final修饰,如果不写,程序默认补充修饰。
- 只能定义抽象方法,需要public abstract 修饰,不写则默认;不能定义构造方法、构造代码块、静态代码块。(1.8及以后可以定义默认非抽象方法)
- 不能创建对象。
Ⅳ. 使用
格式:class 类名 implements 接口名{}
-
类在实现接口时,必须重写接口方法,否则需定为抽象类。
-
可以多接口,每个接口的方法都需要实现。
-
可以同时继承与实现接口,但继承必须放在最前面。如:
class 类名 extends 父类名 implements 接口名1,接口名2,……{}
Ⅴ. 类和接口的组合关系
-
类和类:继承,Java类单继承,多重继承
-
类和接口:java 一个类可以实现多个接口,类不能继承接口,接口也不能继承类,只能:类实现接口。
-
接口与接口:接口可以继承接口,并且可以继承多个接口。若两个接口具有相同的方法,则都实现了。
二. 抽象类 abstract
Ⅰ. 修饰方法(抽象方法)
格式:修饰符 abstract 返回值类型 方法名(参数列表);
不能有方法体,必须存在于抽象类中
Ⅱ. 修饰类(抽象类)
格式:修饰符 abstract class 类名{}
可以有的成员:成员属性、普通成员方法、抽象方法、构造代码块、静态代码块、构造方法(比普通类多一个抽象方法)
特点:
- 若类中有抽象方法,则必须声明为抽象类。
- 父类为抽象类,子类必须重写抽象方法,如果子类不想重写抽象方法,则可将子类也定义为抽象类。
- 抽象类的非抽象方法,可以被继承,不能被重写。
- 抽象类可以定义构造方法,只能提供子类使用。
- 抽象类不能new对象,编译报错。
- 多态
- 方法可以重载,满足编译时期多态
- 支持向上造型,满足运行时多态
- 向上造型:编译看左边,执行看右边抽象子类不能向上造型
- abstract不能和final、private、static 同时使用
- 与final:final修饰方法,则方法不能被重写。修饰类则不能不继承,天生冲突
- 与static:static修饰方法,则不能被重写,天生冲突。(static只能修饰内部的类,不需深究)
- 与private:private权限修饰符只能在本类中可见,而abstract修饰的类、方法都需被子类可见
- 优点:象方法可以满足每个子类都重写自己的方法,提高了灵活性。
三. 接口与抽象类
-
抽象类中可以定义成员属性,接口中成员属性只能是静态常量
-
抽象类可以有抽象方法也可以包含非抽象方法,接口中只能定义抽象方法。(1.8及以后可以定义默认非抽象方法)
-
java类只能单继承,接口可以多实现
-
实际开发中,抽象类更适合用于完成继承结构树,接口更适合扩展类功能。