接口,实现类,多态
程序员文章站
2022-06-13 21:17:59
...
01.接口的含义:
接口就是多个类的公共规范
-
接口是一种引用数据类型,最重要的内容是其中的抽象方法:抽象方法
02.接口的格式
如何定义接口:
- public interface 接口名称{
- //接口内容
- }
- 备注:换成关键字interface之后,编译生成的仍然是Java。clas文件
03.接口在不同Java版本的不同
- 如果时Java7,那么接口中可以包含的内容有:
- 1.常量
- 2.抽象方法
- 如果是Java8,那么还可以额外包含有:
- 3.默认方法
- 4.静态方法
- 如果是Java9,那么还可以包含:
- 5.私有方法
- 在任何版本中,接口都能定义抽象方法
- 格式:public abstract 返回值类型 方法名称(参数列表);
- 注意事项:
- 1.接口中的抽象方法,必须时两个固定的修饰词:public abstract
- 2.这两个关键字可以适当性的省略
- 3.方法的三要素(返回值类型,方法名,参数列表),可以随意定义
04.接口使用步骤:
- 1.接口不能够直接使用,必须有一个实现类来实现接口中的所有抽象方法;
- 格式:
- public class 实现类名称 implements 接口名称{
- //。。。。。
- }
- 2.创建实现类直接使用,
- 注意事项:如果实现类没有实现接口中所有的抽象方法那么这个实现类就必须是抽象类。
05.接口的默认方法定义:
- 从Java8开始,接口里允许定义默认方法。
- 格式:
-
public default 放回值类型 方法名称(参数列表){
-
方法体
-
}
06.接口默认方法的使用
-
A.接口的默认方法可以通过实现类直接调用
-
B.接口的默认方法可以通过实现类覆盖重写
07.接口中的静态方法:
-
格式:
-
public static 返回值类型 方法名(参数列表){
-
//方法体
-
}
-
提示:就是将abstract换成static即可,带上方法体,直接用 接口名称.方法名 使用(不能够通过接口实现类对象来调用接口中的静态方法)
08.接口中的私有方法(java9支持)
-
A.普通的私有方法,解决了多个默认方法之间重复代码的问题
-
格式:
-
private 返回值类型 方法名称(参数列表){
-
//方法体
-
}
-
B.静态的私有方法,解决了静态方法之间代码重复的问题
-
格式:
-
private static 返回值类型 方法名称(参数列表){
-
//方法体
-
}
09.接口中也可以定义“成员变量”,但是必须用public static final三个关键字来修饰。从效果上看,就是接口的常量
-
格式:
-
public static final 数据类型 常量名称 = 数据值
-
备注:一但使用final修饰,说明值不可改变
-
注意事项:
-
1.接口当中的常量,可以省略public static final但是效果不变
-
2.接口当中的常量,必须赋值
-
3.接口当中的常量,使用完全的大写字母,用下划线来分隔。
10.接口使用时的注意事项:
-
1.接口是没有静态代码块和构造方法的
-
2.一个类的父类是唯一的,但是一个类可以实现多个接口
-
格式:
-
public class 类名 implements 接口名1,接口名2{
-
}
-
3.如果实现类所实现的接口,存在重复的抽象类方法,那么只需要重写覆盖一次就好了
-
4.如果实现类中没有覆盖重写接口中的所有抽象方法,那么这个接口就必须是抽象类
-
5.如果实现类中存在冲突的默认方法那么,实现类一定要对冲突的默认方法重写
-
6.一个类如果直接父类当中的方法,和接口中的默认方法产生了冲突那么是优先使用父类的方法
11.类与接口之间的关系
-
1.类与类之间是单继承的,直接父类只有一个
-
2.类与接口之间是多实现的,一个类可以实现多个接口
-
3.接口与接口之间是多继承的
-
注意事项:a.多个父接口中的抽象方法重名没有关系
-
b.多个父类接口中的默认方法重复,在子接口中必须覆盖重写。【且必须带上default关键字】
12.代码中的多态性:父类引用指向子类对象
-
格式:
-
父类名称 对象名 = new 子类名称();
-
或者
-
接口名称 对象名 = new 实现类对象();
-
注意事项:
-
1.再多态中访问成员变量时,等号左边是谁就优先用谁,没有就向上找 总结:编译看左边,运行还看左边
-
2.在多态中访问成员方法时,看new 的是谁就优先用谁,没有就向上找 总结:编译看左边,运行看右边。
13.对象的向上转型
- 格式:父类名称 对象名称 = new 父类名称();
- 含义:右侧创建一个子类对象,把它当作一个父类来使用
- 注意事项:向上转型一定时安全的。从小范围转向了大范围,类似于自动类型转换
14.对象的向下转型
- 格式:子类名称 对象名 = (子类名称)父类对象;
- 含义:向下转型其实就一个还原的过程,将父类对象,还原成本来的子类对象
- Animal animal = new Cat();//本来是猫向上转型为的动物
- Cat cat = (cat)Animal;//本来是猫,已经是动物了,还原成原来的猫
- 注意事项:
- a.必须保证在本来创建的时候就是猫,才能够向下转型成功
- b.如果原来创建对象的时候不是猫非要向下转型为猫,这时候就会报ClassCastException的错误,这个错误叫做类转换异常
15.用instanceof关键字进行类型判断
- 格式:
- 对象 instanceof 类名称
- 这将会得到一个Boolean值结果,也就是判断前面对象能不能做后面的实例。