详解继承抽象类和实现接口的变量和方法以及注意事项
文章目录
- 一、继承抽象类
- 二、实现接口
- 2.1 接口含义
- 2.2 注意事项
- 2.3 Java8 接口新特性
一、继承抽象类
- 有抽象方法的类只能定义成抽象类
- 抽象类不能实例话,即不能用new来实例化抽象类,但可以创建一个具体的子类(即可以定义一个抽象类的对象变量,来引用非抽象子类的对象)
- 抽象类可以包含属性、方法、构造方法.
- 抽象方法必须被子类实现 , 否则继承抽象类的子类并未实现抽象类中的所有抽象方法,那么该子类必须也是抽象类,即必须用abstract修饰.
- 在Java中抽象类表示的一种继承关系, 一个类只能继承一个抽象类, 而一个类却可以实现多个接口!
- 抽象类可以不包含抽象方法
- 抽象类中的变量默认是
friendly 型
,其值可以在子类中重新定义,也可以重新赋值
二、实现接口
2.1 接口含义
接口不是类,而是对类的一组需求描述, 这些类要遵从接口描述的统一格式进行定义
定义规则
- 访问修饰符 : public或默认
- 接口名 : 和类名采用相同的命名机制
- 接口可以实现多继承
2.2 注意事项
- 接口中所要方法自动地属于
public
,因此声明时不必写public
;接口中的域将被自动设为public static final
- 每个类只能够拥有一个超类,但可以实现多个接口
- 接口可以定义常量(注意大写)
- 在实现接口时, 必须把方法声明为public
- 接口不能创建实例 , 但可以声明接口的变量,且必须引用实现了接口的类对象
- JDK1.7之前 , 接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法
- 在Java SE 8之前,不能在接口中实现方法
- Java SE8中, 允许在接口中增加静态方法(当实现自己的接口是,不在需要为使用工具方法另外提供一个伴随类)
- 可以为接口方法提供一个默认实现(必须用
default修饰符
标记这个方法),对于实现该接口的类可以重写默认类,将调用重写的默认类. 也可以不重写默认类,来调用接口中实现的默认类.
一个接口将一个方法定义为默认方法,然后又在超类或另一个接口中定义了同样的方法,解决冲突的方式 :
- 超类优先. 如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略(“类优先” 规则)
- 接口冲突. 如果一个超接口提供了一个默认方法, 另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决冲突.
接口测试代码
2.3 Java8 接口新特性
1. 使用default关键字为接口定义默认方法(有实现的方法)
- 接口的子类
不需要
实现,可以直接使用 - 接口的子类也可以实现默认方法,即重写默认方法
- 可以有多个默认方法
- 实现多个接口中拥有相同的默认方法:
解决方法两种分别为: 1. 重写该默认方法 2.可以使用super来调用指定接口的默认方法指定接口.super.默认方法
2. 可以定义一个或多个默认方法
- 需要使用类名.静态方法名来调用接口中的静态方法
Java8 接口新特性测试代码