接口:
1.类可以实现多个接口,实现功能的扩充
2.使用interface来定义,接口和类是并列的
3.接口中可以定义的成员
3.1JDK7及以前:
1.全局常量:public static final (修饰词可以省略)
2.抽象方法:public abstract (修饰词可以省略)
- 需要在实现接口的类中重写
3.2JDK1.8
1.全局常量:public static final (修饰词可以省略)
2. 抽象方法:public abstract (修饰词可以省略)
- 需要强制在实现接口的类中重写
3.静态方法:public static (修饰词不可以省略)
- 不需要强制在实现接口的类中重写
- 静态方法只能通过接口来调用
4.默认方法:public default (修饰词不可以省略)
- 不需要强制在实现接口的类中重写
- 默认方法可以通过实现接口的类的对象调用
- 如果实现接口的类的父类中有与接口中默认方法同名同参的方法,那么该类的对象优先调用父类中的同名方法
- 如果一个类中同时实现了多个接口,而却接口中存在同名同参默认方法,那么该类在实现接口时就会报错,称为接口冲突(前提是该类没有父类或者父类中没有与与导致接口冲突的默认方法同名同参的方法)。可以在该类中重写次同名同参默认方法,解决该问题
3.3在子类中调用父类或、接口中被重写的方法
- 父类名.super.方法名(参数)
- 接口名.super.方法名(参数)
4.接口中不能定义构造器,所以接口不能实例化
5.通过类去实现(implements)接口,从而体现接口的价值
- 接口中的所有的抽象方法在 类 中必须被重写(实现),否则该类不能被实例化
6.接口和接口之间的继承
- 接口之间是可以实现多 继承
7.接口的使用可以体现多态性
8.接口实现了对创建类的规范
- 实现接口的 类 必须 实现接口中的方法,起到了规范的作用
- 在开发中,除了面向对象编程,还有面向接口编程
- 面向接口编程,一定程度上解决了类 的单继承问题
9.一个类同时继承父类和实现接口
- 继承应该写在前面
10.接口的匿名实现类
- 接口名 对象名 = new 接口名(){
重写抽象方法
}
代码:
public class interface_test {
public static void main(String[] args) {
Student student = new Student();
student.leanTime();
student.test2(); //接口中 默认方法的调用
System.out.println("------------------");
//10.接口的匿名实现类
Score score = new Score() {
@Override
public void getScore() {
System.out.println("我是接口Score的匿名实现类score中的getscore方法");
}
};
score.getScore();
}
}
interface LearnTip{ //2.定义一个结构
public static final int MAX_ABLE = 100; //3.定义一个全局常量
public static final int MIN_ABLE = 1; //3.定义一个全局常量
public abstract void leanTime(); //3.定义一个抽象方法
public static void test() { //静态方法:public static (修饰词static不可以省略)
System.out.println("我是接口中的静态方法");
}
public default void test2() { //静态方法:public default (修饰词default不可以省略)
System.out.println("我是接口中的默认方法");
}
}
interface Score{
public abstract void getScore();
}
class Student implements LearnTip,Score{ //5.Student 实现 接口 LearnTip和接口 Score
@Override
public void leanTime() { //实现LearnTip接口中的方法
System.out.println("我是学生,我一天学习8小时");
}
@Override
public void getScore() { //实现Scorep接口中的方法
System.out.println("99分");
}
}
interface Test1{
void menthod1(); //修饰词可以省略
}
interface Test2{
void menthod2();
}
//6.接口之间是可以实现多 继承
interface Test3 extends Test1,Test2{
}
//9.一个类同时继承父类和实现接口, 继承应该写在前面
class Person{}
class Worker extends Person implements LearnTip{
public void leanTime(){
}
}
结果: