抽象和接口
抽象abstract
abstract 修饰符
- 用 abstract 修饰的方法叫做抽象方法,不能有方法体
- 拥有抽象方法的类必须是抽象类
- 抽象类中可以存在不是抽象方法的普通方法
- 抽象类必须被继承
- 抽象方法必须在子类中重写
- 抽象类不能直接创建对象,需要通过子类对象进行调用
接口 interface
接口的定义
public interface 接口名称{
/*成员*/
}
接口中的成员
接口中的常量
- 格式:
public static final 常量名称 = 值
- 注意事项
- final 修饰的变量不能改变
- 接口中的常量必须赋值
- 常量使用大写字母、匈牙利命名法
接口中的抽象方法
接口中的抽象方法必须用
public abstract
修饰
接口中的默认方法
- 格式:
public default 返回值类型 方法名(参数列表){方法体}
- 注意事项
- 用于接口升级
- 通过实现类的对象可以直接调用
- 默认方法也可以在实现类中进行重写
- Java8(包含)以上版本
接口中的静态方法
- 格式:
public static 返回值类型 方法名(参数列表){方法体}
- 注意事项
- 不能通过对象进行调用
- 通过类名直接调用
- Java8(不包含)以上版本
接口中的私有方法
- 格式:
private [static] 返回值类型 方法名(参数列表){ }
- 注意事项
- 私有方法只能提供本类中使用
- 普通私有方法:解决普通default方法间的代码复用问题
- 静态私有方法:解决静态default方法间的代码复用问题
- Java8(不包含)以上版本
接口的实现
实现接口的格式
public class 类名称 implements 接口名称{
/*........*/
}
- 注意事项
- 实现接口的类中必须重写接口中所有的抽象方法
- 通过创建“实现类”对象来调用接口中的成员
- 如果实现类中没有重写接口中所有的抽象方法,那么这个类一定是个抽象类
一个类可以同时实现多个接口
public class 类名 implements 接口名1,接口名2{
/*........*/
}
- 注意事项
- 实现多个接口的时候需要重写实现所有接口当中的所有方法
- 如果存在宠物的默认方法,那么实现中必须对重复的方法进行重写
接口的多继承
public interface 接口名 extends 接口名1,接口名2{
/*.......*/
}
- 注意事项
- 如果default方法重名,需要重写default方法(子接口必须针对default方法进行重写,不能省略default)
一个类可以继承其他类的同时实现一个或多个接口
public class 子类名 extends 父类名 implements 接口名1,接口名2{
/*.....*/
}
- 注意事项
- 子类中必须重写所有接口中的抽象方法
- 若父类是抽象类,同样需要重写父类中的抽象方法
- 父类中与接口中方法重名,有限执行父类中的方法
final 的使用
- 修饰类:用final修饰的类不能被继承
- 修饰局部变量:用final修饰的局部变量一旦被赋值则不允许修改
- 修饰成员变量:用final修饰的成员变量必须初始化一个值
- 直接赋值
- 构造方法赋值
- 修饰方法:用final修饰的方法不能被重写