接口 interface
一、基本概念
- 实现了 规范 和 具体实现 的分离;
- 普通类(具体实现); 抽象类(具体实现,规范);接口(规范);
- 接口之间是继承关系(extends);类和接口之间是实现(implements);
- 允许接口之间的 多继承 和 多实现;
1、接口与类
- 接口不能用于实例化对象,没有构造方法
- 一般来说接口中的方法都是抽象方法,修饰符默认public abstract
- 接口成员变量修饰符默认public static final ,实际上是常量
- 一般来说接口中不能含有静态代码块以及静态方法
- 注意:JDK1.8中接口可以定义有方法体的方法,修饰符为
static
或default
(定义方法默认实现)
/* 文件名 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
2、标记接口
- 不含任何方法的接口
- 可以使用一个标记接口来建立一组接口的父接口
- Serializable接口用于标记一个类是否可被序列化和反序列化
面向接口编程:搭建软件的框架,软件的整体设计
3、接口实现
- 接口的实现类必须实现接口的所有方法,而且必须将这些方法声明为 public 的
- 可以实现多个接口,间接实现多继承
- 一个接口可以继承另外的接口,该接口的实现类的话需要实现该接口和父接口
二、类型转换
1、基本类型
- 基本类型是值从一种类型转换为另一种类型
- 自动的转换过程一般是容量低的向容量高的类型进行转换
2、引用类型
- 仅仅是引用转换为了超类或者接口的引用,对象本身是没有发生变化的
- 这个过程是自动的,称为向上转型,向上转型之后特有的方法会丢失,只能调用超类方法
- 只有在已知对象的具体类型的情况下可以进行强制的向下转型
- 强转可能会出现类型的异常,可以先用 instanceof 方法判断
3、方法查找
实例方法查找
- 具体方法的查找是从创建对象的类开始沿着继承结构往上找
- 下面的示例中需要注意的是emp2调用的是 manager 的方法
类方法查找
- 总是在引用变量声明的类中查找,实例中的emp2的类方法调用的就是 employee 的方法,而不是 manager的方法
多态
一、概述
1、多态的概念
- 简单来讲,超类及其子类都可以看作超类的类型,接口和实现类都可以看作接口类型,向这些 一样的类型 传递箱相同的消息(就是调用相同的方法),会有不同的反应(就是具体的方法体是不同的),这就是所谓的多态
2、关于多态的细节说明
- 多态是方法的多态,与属性无关
- 分为 重载式多态 和 重写式多态
- 多态的原理是基于运行时的动态方法绑定
多态的存在要有3个必要条件
- 继承或实现
- 方法重写或重载
- 父类引用指向子类对象或接口引用指向实现类对象
3、构造方法和多态
- 构造方法应该用尽可能少的动作将状态设置好
- 尽量不要在构造器中进行方法调用,尤其是多态调用
- 构造器只能安全调用
final
和private
方法,因为这些方法不会被重写
二、抽象方法和抽象类
1、抽象类
- 抽象类用 abstract 进行修饰
- 抽象类不一定有抽象方法
- 抽象类可以包含一般的类成员
- 抽象类不可以实例化
- 抽象类的子类必须实现抽象类中所有的抽象方法才可以实例化
public abstract class Employee
{
//code
}
2、抽象方法
public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();//抽象方法
}
3、注意事项
- 如果一个类包含抽象方法,要么是抽象类,要么是接口
- 抽象类可以没有抽象方法
- 任何子类必须重写父类所有抽象方法,或者声明自身为抽象类
- 子抽象类继承父抽象类,在父类存在有参构造器的前提下必须显性调用父类有参构造