4.1 接口基础知识
4.1.1 为什么需要接口
原因有两点:(1)防盗门不是锁,不符合继承中is a 的关系;
(2)Java只支持单继承。如何解决这个问题呢?这时候就要用到接口,可以将锁定义为接口,让防盗门继承门,实现锁的接口。
4.1.2 什么是接口
生活中接口就是说一些USB接口什么的。在微软中,接口同样是一种规范和标准,他们可以约束类的行为,是一些方法他正的集合,但是没有方法的实现。在这个角度来讲,接口可以看做一种特殊的”抽象类”,但是采用与抽象类完全不同的语法来表示,两者设计理念也是不同的,抽象类利于代码复用,接口利于代码的扩张和维护。Java中接口的定义语法和类实现接口的语法如下:
[修饰符] interface 接口名 extends 父接口1,父接口2,……{ //常量定义 //方法定义 }
Class 类名 extends 父类名 implements 接口1,接口2,……{ //类成员 } |
说明:
(1) 接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前可见。
(2) 接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,即接口中的属性都是全局金泰常量。接口中的常量必须在定义时指定初始值。
(3) 接口中所有方法都是抽象方法。接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。
(4) 和抽象类一样,接口也不能实例化,接口中不能有构造方法。
(5) 接口口之间可以通过extends实现继承关系,一个几口可以继承多个接口,但接口不能继承类。
(6) 接口的实现类必须实现交界口的全部方法,否则必须定义为抽象类。
一个类智能有一个直接父类,但可以通过implements实现多个接口,当类在继承父类的同时又实现多个接口是,extends关键字必须位于implemets关键字之前。
本章总结
(1)接口中的属性都是全局静态常量,接口中的方法都是全局抽象方法,接口中没有构造方法。
(2)类只能继承一个父类,但可以实现多个接口,一个类如果实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类。Java通过实现接口达到了多重继承的效果。
(3)接口表示一种约定,接口表示一种能力。接口体现了约定和实现分离的原则。
(4)抽象类利于代码复用,接口利于代码维护。
(5)通过面向接口编程,可以减低代码间的耦合性,,提高代码的可扩展性和可维护性。
(6)面向接口编程意味着:开发系统时,主题构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统。
(7)C#中接口欧欧的成员主要是方法和属性,接口中不能包含常量,变量,构造方法好任何静态成员,定义接口时显式指定任何修饰符是非法的。