接口
接口的定义和类方式相似,但是使用的是interface关键字。。。它并不是类,而是另外一种引用数据类型。
引用数据类型:数组,类,接口
接口不能创建对象,但可以被实现(implements,类似于被继承)
定义格式:public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}
——————————————————
抽象方法:使用abstract关键字修饰,可以省略,没有方法体。该方法供子类实现使用。
例如:public interface InterFaceName{
public abstract void method();
}
默认方法:使用default修饰,不可省略,供子类调用或者子类重写
例如:public interface InterFaceName{
public default void method(){}
}
静态方法:使用static修饰,供接口直接调用
例如: public interface InterFaceName{
public default void method() {
//执行语句
}
public static void method2(){
//执行语句
}
}
静态方法是无法重写的
静态方法在接口中创建
私有方法:
使用private修饰,供接口中的默认方法或静态方法调用。
例如: public interface InterFaceName{
private void method(){
//执行语句
}
}
基本的实现
非抽象子类实现接口:
1、必须重写接口中所有抽象方法
2、继承了接口的默认方法,即可直接调用,也可以重写
实现格式:
class 类名 implements 接口名 {
//重写接口中抽象方法【必须】
//重写接口默认方法【可选】
}
抽象方法的使用
必须全部实现,例如:
定义接口:
public interface LiveAble{
//定义抽象方法
public abstract void eat();
public abstract void sleep();
}
定义实现类:
public class Animal implements LiveAble {
@Override
public void eat(){
system.out.println(“吃东西”);
}
@Override
public void sleep(){
system.out.println(“晚上睡”);
}
}
定义测试类
public class InterfaceDemo{
public static void main(String[] args){
//创建类对象
Animal a=new Animal()
//调用实现后的方法
a.eat();
a.sleep();
}
}
输出结果:吃东西
晚上睡角
在接口中写私有方法时,需要在私有方法前用默认方法调用私有方法
例如:default void a(){
…()调用私有方法
…()
}
————————————————————————————
抽象方法:
在接口定义抽象方法 在实现类中打印方法 在测试类中new一个新的子类对象 之后调用实现后的方法
默认方法:
在接口定义中写一个打印方法体 实现类中 继承接口 里面什么都不用写 直接调用 在测试类中new一个新的子类对象 之后调用默认方法
重写默认方法 就是在实现类中写一个方法体 在测试类中调用重写方法 之后输出的结果就是在实现类中写的东西
静态方法:
在接口定义中写一个打印方法 实现类中啥也不用写 因为无法重写静态方法 测试类中调用接口方法