接口
定义
接口是比“抽象类”更"抽象"的“抽象类”——更加规范的对子类进行约束
注意
- 全面地专业地实现——规范和具体实现的分离
- 从接口的实现者角度看,接口定义了可以向外部提供的服务
- 从接口的调用者角度看,接口定义了实现者能提供那些服务
- 接口是两个模块之间的通信标准。且接口和实现类不是父子关系,是实现规则的关系
区别
- 普通类:具体实现
- 抽象类:具体实现,规范(抽象方法)
- 接口:规范,可以实现多继承
定义接口的详细说明
- 访问修饰符:只能是public或默认
- 接口名:和类名采用相同命名机制
- extends:接口可以多继承
- 常量:接口中的属性只能是常量——写与不写都是public static final修饰
- 方法:接口中的方法只能是——public abstract
接口的要点
- 子类通过implements来实现接口中的规范
- 接口不能创建实例,但是可用于声明引用变量类型
- 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的
- JDK1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法
package text;
public interface text{
/*public static final */ int sum=100;
//没有必要写abstract,因为接口中的所有方法都是抽象方法
/*public abstract*/ void test();
}
class MyClass implements text {
public void test() {
System.out.println(sum);
System.out.println("打印");
}
}
public class text01{
public static void main(String[] args) {
MyClass d=new MyClass();
d.test();
text dd=new MyClass();//可以把子类对象赋给父类类型,当成text的对象
}
}
接口的多继承
package text;
public class text01 {
}
interface A {
void testa();
}
interface B {
void testb();
}
/**接口可以多继承:接口C继承接口A和B*/
interface C extends A, B {
void testc();
}
//C接口包含了A和B的方法
//类没有多继承,接口有多继承
class Test implements C {
public void testa() {
}
public void testb() {
}
public void testc() {
}
}
面向接口编程
面向接口编程是面向对象编程的一部分
原因:降低程序模块间的耦合性,提高整个系统的可扩展性和可维护性——接口就是规范