Day01-接口
接口
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有!
- 接口:只有规范!自己无法写方法~专业的约束!约束和现实分离:面向接口编程
- 接口的本质是契约,就像法律一样,制定好大家都遵守
- OO的精髓,是对对象的抽象,最能体现这一点的就是接口,为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象
//interface 定义的关键字,接口都需要有实现类
//抽象的思维~java
public interface UserService{
//接口中的所有的定义其实都是抽象的 public abstract
//属性默认的都是常量~public static final
int age=99;
void add(String name);
}
//可以实现多个接口implements
public class UserServiceImpl implement UserService{
@override
public void add(String name){
}
}
作用:
- 约束
- 定义一些方法,让不同的人实现
- 方法是 public abstract
- 变量是 public static final
- 接口不能被实例化,接口中没有构造方法
- 可以实现多个接口implements
- 必须要重写接口中的方法
java8中关于接口的新规范
-
接口中的静态方法,只能通过接口来调用
-
通过实现类的对象,可以调用接口中的默认方法
如果实现类重写了接口中的默认方法,调用时,任然调用的是重写后的方法
-
如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没重写此方法的情况下,默认调用的是父类中的同名同参数的方法-->父类优先原则
-
如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没重写此方法的情况下,报错-->接口冲突,这就需要我们必须在实现类中重写此方法
-
如何在子类(或实现类)的方法中调用父类\接口中被重写的方法
public void myMethod() method3();//调用自己定义的重写的方法 super.method3();//调用的是父类中声明的 //调用接口中的默认方法 CompareA.super.method3(); CompareB.super.method3();
抽象类和接口的异同?
相同点:不能实例化;都可以包含抽象方法;多实现
不同点:把抽象类和接口(java7\java8\java9)的定义\内部结构解释说明
类:单继承性 接口:多继承