1. 接口(interface)
接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。
- jdk7及之前:抽象方法
- jdk8: 默认方法和静态方法
- jdk9: 私有方法 接口与类定义类似,它是通过关键字interface声明,它也会编译成.class文件,但是它是一种引用类型数据
引用数据类型:数组,类,接口。
通用格式,定义格式
public interface 接口名称 {
// 抽象方法 jdk8之前
// 默认方法 jdk8
// 静态方法 jdk8
// 私有方法 jdk9
}
1.抽象方法
抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体。该方法供子类实现使用
public interface InterFaceName {
public abstract void method();
}
2.默认和静态方法
- 默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。(可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。)
- 静态方法:使用 static 修饰,供接口直接调用。
public interface InterFaceName {
public default void method() {
// 执行语句
}
public static void method2() {
// 执行语句
}
}
3.私有方法
私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。(
静态与.class 文件相关,只能使用 接口名调用,不可以通过实现类的类名或者实现类的对象调用)
- 私有方法:只有默认方法可以调用。
- 私有静态方法:默认方法和静态方法可以调用。 如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法 去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。同学们在已学技术的基础上,可以自行测 试。
public interface InterFaceName {
private void method() { // 执行语句 }
}
4. 接口实现类(implements)
- 必须重写接口中所有抽象方法。
- 继承了接口的默认方法,即可以直接调用,也可以重写。
5. 接口其它特点
- 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
- 接口中,没有构造方法,不能创建对象。
- 接口中,没有静态代码块。
2. 多态
面向对象三大特性:
- 封装
- 继承
- 多态
多态: 是指同一行为,具有多个不同表现形式。
- 继承或者实现【二选一】
- 方法的重写【意义体现:不重写,无意义】
- 父类引用指向子类对象【格式体现】
1. 多态的好处
实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展 性与便利
2. 引用类型转换
- 向上转型
父类类型 变量名 = new 子类类型();
- 向下转型
子类类型 变量名 = (子类类型) 父类变量名;
-
为什么要转型?
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子 类特有的方法,必须做向下转型
-
转型异常
当2个类型之间没有任何继承关系,是不能做类型转换的,一般强转会报ClassCastException异常,所以一般先用 instanceof关键字做一下判断。
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。