二 抽象类
1 定义格式
//抽象类
public abstract class Animal{
//抽象方法
public abstract void eat();
//普通方法
public void method(){
}
}
注意:
抽象方法所在的类,必须是抽象类,抽象类中也可以定义普通方法。
抽象类方法中不能有方法体。
2 抽象类的使用
- 不能用new创建抽象类对象
- 必须有一个子类来继承抽象类
- 子类必须覆盖重写抽象父类中的所有抽象方法,除非该子类也为抽象类,(去掉abstract关键字进行重写覆盖)。
- 抽象类中可以有构造方法,供子类创建对象时,初始化父类成员使用。
- 抽象类中不一定含抽象方法,但是有抽象方法的类必定是抽象类
三 接口
接口是一种多个类的公共规范,是一种引用数据类型
1 格式定义
public interface 接口名称 {
//...
}
2 接口使用
要想使用接口,就需要一个实现类来“实现”该接口
public class 实现类名称 implements 接口{
//...
}
注意:
接口的实现类必须覆盖重写(实现)所有的抽象方法,除非该实现类是个抽象类。
Java7,接口包含
1. 常量
2. 抽象方法
Java8,额外包含
3. 默认方法
4. 静态方法
Java9, 额外包含
5. 私有方法
3 接口中的方法及常量
1) 抽象方法
public abstract 返回值类型 方法名(参数列表);
注意:
接口中的抽象方法,修饰符必须
是public abstract
,可以省略。
public interface Usb {
public abstract method3();//抽象方法
public method2();//抽象方法
abstract method1();//抽象方法
void method();//抽象方法
}
2) 默认方法 default
public default 返回值类型 方法名(参数列表){
//...
}
注意:
- 对于接口中的default方法,其实现类不必再重写该default方法,default用于在接口中进行添加新方法
- 接口中的默认方法,可以通过接口实现类对象进行调用,及覆盖重写。
3) 静态方法
public static 返回值类型 方法名(参数列表){
//...
}
注意:
- 不能通过接口的实现类对象调用。
- 通过接口名称,直接调用。
4) 私有方法
(私有方法,仅供接口内部使用)
1.普通私有方法,解决多个默认方法之间重复代码的问题
private 返回值类型 方法名(参数列表){
//...
}
- 静态私有方法,解决多个静态方法之间重复代码的问题
private static 返回值类型 方法名(参数列表){
//...
}
5) 常量
public static final 数据类型 常量名称 = 数据值;
int NUM_SUM = 13;//一般大写,用下划线分隔
注意:
- 接口中定义的“成员变量”必须使用
public static final
进行修饰,也可以省略,是默认的。 - 接口中的常量必须进行赋值;
4 使用接口的注意事项
public class MyInterfaceImpl extends Object
implements MyInterfaceA,MyInterfaceA{
//...
}
- 一个类只能继承一个父类(不写默认继承Object类),但能实现多个接口
- 接口是没有静态代码块和构造方法的
- 如果实现类所实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写一次即可
- 如果实现类没有重写接口中的所有抽象方法,那么该实现类必须是一个抽象类
- 如果实现类所实现的多个接口中,存在重复的默认方法,那么实现类必须对该默认方法进行重写
- 一个类的父类方法和接口中的默认方法产生了冲突,则优先使用父类中的方法
- 一个抽象类可以实现若干个接口
- 接口不能继承抽象类,但是接口可以使用extends关键字继承多个父接口