今天的博客主题
Java面向对象 ——》Java接口
接口
接口是一个特殊的抽象类。
它是一系列方法的声明,是一些方法特征的集合。
这些方法没有具体的实现,因此这些方法可以在不同地方被不同类实现不同的行为。
比抽象类更进一步的抽象了类。
接口的特点
1)接口只能有常量(默认修饰符 public static final )
2)接口只能有抽象方法(默认修饰符public abstract)
3)接口没有构造函数,不能被实例化
4)接口不能被类继承,只能被类实现
5)接口之间可以像类一样进行继承
6)...
接口的语法
接口通过 interface 关键字来声明
public interface 接口名{ ... }
代码示例
// 定义一个人类接口
public interface Person {
void work();
}
// 学生类 实现 人类接口。 实现自己的行为
public class Student implements Person {
public void work() {
System.out.println("学生的工作是学习");
}
}
// 老师类,警察类,等等都来实现人类接口完不同的工作
接口更像是一个规范,就是让实现了这个接口的类看起来都是这样的。
注意:
1)类实现接口,要实现接口里的全部方法,否则那这个类就只能是抽象类
2)类在实现接口的方法时,不能抛出强制性异常,只能在接口中或者继承接口的抽象类中抛出该强制性异常。
3)类在重写接口方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
4)如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
接口继承
接口之间的继承和类的继承一样,单唯一不同的是类不支持多继承,接口支持多继承。
接口继承也是使用 extends 关键字来完成的。
public interface A { ... }
public interface B extends A { ... }
多继承,只需要在 extends 关键字后面增加要继承的接口,接口之间用逗号隔开。
标记接口
标记接口就是没有任何方法和属性的接口。
仅表明了他的类属于一个特地帮的类型,供其他代码来测试允许做一些事情。
标记接口的作用就是给某个对象标识一下,使对象拥有某个或某些特权。
比如 Serializable 接口,就是一个标识接口,只是用来告诉JVM,实现这个接口的类需要序列化处理,而不需要实现这个接口的方法。
生活中的接口
电脑的USB接口,就是一个很好的栗子。
接口用来统一一个规范,想要接入我这个接口,就得按照我这接口规范来。
接入进来的东西,每个又有自己的一套行为规范。
实现类
实现类和普通的类没什么区别类。
这个实现类就是对接口来说的,一个正常类实现了某个接口,那这个类就被称为接口的实现类。
通过 implements关键字来完成。
如果没有这个实现类,那接口也就没什么用了。
类 抽象类 接口 三者的区别
1)接口中所有的方法隐含都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法。
2)类可以实现很多个接口,但是只能继承一个抽象类。
3)类可以不实现抽象类和接口声明的所有方法,在这种情况下,类也必须得声明成是抽象的。
4)抽象类可以在不提供接口方法实现的情况下实现接口。
5)接口中声明的变量默认都是final的,抽象类可以包含非final变量。
5)接口中的成员函数默认都是public的,抽象类中的成员函数可以是private,protected或public
6)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是如果它包含main方法的话是可以被调用的。
7)抽象类中可以有普通方法,接口中不能。
8)抽象类可以有构造函数,接口没有。
9)抽象类中可以有普通变量,接口没有。
10)抽象类不能实现多继承,接口可以多继承。
11)符合is-a关系的选用抽象类,符合has-a关系的选用接口。