1、接口的基础语法
- 接口是一种"引用数据类型"。
- 接口时完全抽象的。
- 接口怎么定义:[修饰符列表] interface 接口名{}
- 接口支持多继承。
- 接口中只有常量和抽象方法。
- 接口中所有的元素都是public修饰的。
- 接口中抽象方法的public abstract 可以省略。
- 接口中常量的public static final 可以省略。
- 接口中方法不能有方法体。
- 类和类之间叫做继承,类和接口之间叫做实现
继承使用extends关键字完成。
实现使用implements关键字完成。
注意:当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖/重写) - 一个类可以同时实现多个接口。 接口的这种机制弥补了类和类之间只支持单继承的缺陷
- 如果继承和实现同时存在,则extends在前,implements在后
- 使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)
public class InterfaceTest01
{
public static void main(String[] args) {
System.out.println(MyMath.index);//10
System.out.println(MyMath.PI);//3.1415926
}
}
interface A{
}
interface B extends A{
}
//接口多继承
interface C extends A,B{
}
interface MyMath{
//常量
public static final double PI = 3.1415926;//完整写法
int index = 10;//缩略写法
//抽象方法
public abstract int sub(int a,int b);//完整写法
int sum(int a,int b);//缩略写法
}
class MyMathImpl implemenrs MyMath{
//实现MyMath接口中所有的抽象方法
public int sum(int a, int b){
return a + b;
}
public int sub(int a, int b){
return a - b;
}
}
public class InterfaceTest02 {
public static void main(String[] args) {
Flyable f1 = new Cat();
f1.Fly();//我是一只会飞的猫猫
}
}
//动物类:父类
class Animal{
}
//可飞翔的接口
interface Flyable{
void Fly();
}
//动物类子类:猫类
//如果继承和实现同时存在,则extends在前,implements在后
class Cat extends Animal implements Flyable{
@Override
public void Fly() {
System.out.println("我是一只会飞的猫猫");
}
}
//动物类子类:猪类
class Pig extends Animal{
}
2、接口在开发中的作用
注意:接口在开发中的作用,类似于多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程。降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
接口的使用离不开多态机制(接口+多态才可以达到降低耦合度)
3、抽象类和接口有什么区别?
- 抽象类是半抽象的;接口时完全抽象的。
- 抽象类中有构造方法;接口中没有构造方法。
- 接口和接口之间支持多继承;类和类之间只支持单继承
- 一个类可以同时实现多个接口;一个抽象类只能继承一个类(单继承)
- 接口中只允许出现常量和抽象方法
注意:接口在项目中使用的较多。一般都是对"行为"的抽象。