Java接口的概念

xiaoxiao2021-02-28  127

Java 可以创建一种称作接口(interface)的类,在这个类中,所有的成员方法都是抽象的,也就是说它们都只有定义而没有具体实现,接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,用interface,可以指定一个类必须做什么,而不是规定它如何去做。定义接口的语法格式如下: 访问修饰符 interface 接口名称 { 抽象属性集 抽象方法集 }

现实中也有很多接口的实例,比如说串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口。Serial ATA委员会不负责生产硬盘,只是指定通用的规范。

希捷、日立、三星等生产厂家会按照规范生产符合接口的硬盘,这些硬盘就可以实现通用化,如果正在用一块160G日立的串口硬盘,现在要升级了,可以购买一块320G的希捷串口硬盘,安装上去就可以继续使用了。

在Java中可以模拟Serial ATA委员会定义以下串口硬盘接口。 //串行硬盘接口 public interface SataHdd{ //连接线的数量 public static final int CONNECT_LINE=4; //写数据 public void writeData(String data); //读数据 public String readData(); }

目前看来接口和抽象类差不多。确实如此,接口本就是从抽象类中演化而来的,因而除特别规定,接口享有和类同样的“待遇”。比如,源程序中可以定义多个类或接口,但最多只能有一个public 的类或接口,如果有则源文件必须取和public的类和接口相同的名字。和类的继承格式一样,接口之间也可以继承,子接口可以继承父接口中的常量和抽象方法并添加新的抽象方法等。

但接口有其自身的一些特性,归纳如下:

接口中声明的成员变量默认都是 public static final 的,必须显示的初始化。因而在常量声明时可以省略这些修饰符。 接口中只能定义抽象方法,这些方法默认为 public abstract 的,因而在声明方法时可以省略这些修饰符。试图在接口中定义实例变量、非抽象的实例方法及静态方法,都是非法的。 public interface SataHdd{ //连接线的数量 public int connectLine; //编译出错,connectLine被看做静态常量,必须显式初始化 //写数据 protected void writeData(String data); //编译出错,必须是public类型 //读数据 public static String readData(){ //编译出错,接口中不能包含静态方法 return “数据”; //编译出错,接口中只能包含抽象方法, } } 接口中没有构造方法,不能被实例化。 一个接口不实现另一个接口,但可以继承多个其他接口。接口的多继承特点弥补了类的单继承。 //串行硬盘接口 public interface SataHdd extends A,B{ // 连接线的数量 public static final int CONNECT_LINE = 4; // 写数据 public void writeData(String data); // 读数据 public String readData(); } interface A{ public void a(); } interface B{ public void b(); }
转载请注明原文地址: https://www.6miu.com/read-48564.html

最新回复(0)