接口的引入和概念:
我们知道,如果一个类没有重写完父类中的所有抽象方法,那么这个类必定是抽象类。那么如果一个抽象类中都是抽象方法,则可以将该抽象类定义成接口。
即:接口概念:接口是抽象方法的集合。
语法:
访问控制符 修饰符 class 类名 implements 接口1 [,接口2, ……] {
变量;
方法;
}
注:
通过extends关键字可以使自定义的接口实现继承,但需要注意以下两点:
接口只能继承父接口,不能继承抽象类和普通类。
接口弥补了Java单一继承的缺点(Java中的类只能继承一个父类),即接口可以继承多个父接口,它们之间用英文逗号隔开。
接口里的注意事项:
1. 接口中的抽象方法必须通过一个类来实现(implements)
实现类:一个实现了接口中抽象方法的类.
例:
Mammal mammal = new Whale();
mammal.move();
因为Whale类实现了接口中抽象方法,所以Whale类即是实现类
2. 一个类可以实现一个或n个接口;如果一个类没有实现接口中的所有抽象方法,则该类必须为抽象类
public class Son implements IFather,IMother{
void move();
void breath();
void sleep();
void speak();
}
public interface IMother {
void speak();
void sing();
}
public interface IFather {
void move();
void breath();
void sleep();
}
我们可以看出Son类并没有实现IFather,IMother接口里的全部抽象方法,所以程序会报错。Son类必为抽象类。
3. 接口中没有默认构造方法,而且也不能定义构造方法
4. 接口一般以I开头
5. 接口中的变量其实为public static fianl类型的常量
证明static:
证明final:
6. 接口中的抽象方法默认public abstract
例如:IFather中的方法并没有写public abstract,但是并没有报错,这说明接口中的抽象方法默认public abstract。
7. 在JDK8及其以后版本的JDK中,接口内可以定义静态方法(static修饰的方法)与默认方法(default关键字修饰的方法)
8. 继承:Java类只有单继承;
但是Java中接口可以多继承
Java中只存在单继承
9.
含有抽象方法的抽象类必须至少有一个子类完全实现了其抽象方法 √
含有抽象方法的抽象类一定至少会有一个非抽象类
10. 子接口可以实现父接口中的某些抽象方法 错
11. 接口重复抽象方法,实现类实现一个;
接口中重复常量名,实现类必须指定到底调用哪个接口中的常量
例1、
例2、