今天的博客主题
基础篇 --》面向对象 --》Java接口
什么是接口?
接口是一个抽象类型,是抽象方法的集合。
接口来体现方法的特征,无方法实现,因此这些方法可以在不同的地方被不同的类实现。
Java接口,Java语言中存在的结构,有特定的语法和结构。
通过Interface关键字来声明一个接口。
接口的特点
接口中每一个方法都是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
接口和类的区别
接口没有构造方法,所以不能被实例化。而类有构造方法。
接口不能被类继承,只能被类来实现。类可以继承,但不能被实现
接口支持多继承,通过实现接口完善不能多继承机制。类可以被继承,只能单继承。
接口中每一个方法都是抽象方法。而类里不能出现抽象方法。
接口里不能包含成员变量,除了static和final变量。类里都可以。
类定义了一个实体,包括实体的属性,实体的行为。接口定义了一个实体可能发生的动作,只有一个声明,没有具体的行为。
接口和类相似点
接口里可以出现多个方法
接口文件后缀也是.java,字节码存在.class文件里
接口相应的字节码文件必须在与包名称相匹配的目录结构中
声明接口
接口通过关键字Interface来声明
例
public interface HelloWorld {
//定义常量
public static final String HELLO = "你好";
//定义一个抽象方法
public void getHello();
}
这样就定义了一个接口类了。
在接口中定义常量关键字 public static final可以省略不写
这个接口是用来被其他类来实现的,当类实现接口的时候,这个类要实现接口所有的方法,否则这个类必须定义为抽象类。
通过关键字implements来实现接口,如果不实现这个接口里所有接口,是编译不过去的。
public class Hello implements HelloWorld{
@Override
public void getHello() {
System.out.println(HelloWorld.HELLO);
}
}
public class TestDemo{
public static void main(String[] args) {
HelloWorld hw = new Hello();
hw.getHello();
}
}
输出结果:
你好
类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
一个类可以同时实现多个接口。
一个类只能继承一个类,但是能实现多个接口。
一个接口能继承另一个接口,这和类之间的继承比较相似
在实现接口的时候注意事项
一个类可以同时实现多个接口。
一个类只能继承一个类,但是能实现多个接口。
一个接口能继承另一个接口,这和类之间的继承比较相似
接口继承
接口之间的继承和类继承一样,唯一区别就是类不支持多继承,而接口可以。
接口继承也是使用extends关键字
public interface A extends B{}
如果需要多继承,那么只需要在extends关键字后面直接增加想要多继承的类,多个用逗号隔开
public interface A extends B,C,D{}
标记接口
比较常用的继承接口是没有包含任何方法的接口,这类接口被称为标记接口。
标记接口是没有任何方法和属性的接口。仅表明了他的类属于一个特地帮的类型,供其他代码来测试允许做一些事情。
标记接口的作用就是给某个对象标识一下,使对象拥有某个或某些特权。
比如Serializable 接口,就是一个标识接口,只是用来告诉JVM,实现这个接口的类需要序列化处理,而不需要实现这个接口的方法。
在一些源码当中,这样的接口挺多。以后见到就知道了,不至于很陌生
接口的作用
接口说了这么多,那么接口的作用是什么呢?
制定标准。
制定好一个标准之后,所有的参与者只要遵循这个规则,都可以参与。
生活中最常见的就是电脑的USB接口,统一一个规范,所有想要接入我接口的必须按照这个来。
那么介入过来的东西,每个都有自己的一套规范。
温故而知新