Java面向对象系列(14)- 接口的定义与实现
接口
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有
- 接口:只有规范!约束和实现分离
- 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你是好人,则必须干掉坏人。
- 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
- OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象
- 声明类的关键字是class,声明接口的关键字是interface
接口一
package oop.demo09; //interface 接口 public interface UserService { //常量:接口中定义的参数都是常量:public static final public static final int age = 99; //只保留常量类型,常量名和值即可 double score = 99.5; //接口中所有的方法定义都是抽象的即 public abstract public abstract void go(); //public abstract直接去掉,方法保留返回类型和方法名,以及参数(如果有的话) void run(String name); void add(String name); void delete(String name); void update(String name); void query(String name); }
接口二
package oop.demo09; public interface TimeService { void time(); }
实现接口的类
package oop.demo09; //实现接口的类命名,一般命名为接口+Imp,即UserServiceImp //通过implments关键字来继承(实现)接口的类 //实现接口的类,需要重写接口中的方法 //利用接口实现多继承 public class UserServiceImp implements UserService,TimeService { @Override public void go() { } @Override public void run(String name) { } @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } @Override public void time() { } }
总结
- 接口就是一个约束,定义了一些方法,让不同的人去实现它
- 定义接口类使用关键字interface
- 接口类不能被实例化,接口中没有构造方法,只有方法名,构造方法有继承(实现)接口的类去实现
- 接口类中方法的定义都是抽象的,即public abstratc。只需要保留方法的返回类型+方法名+(参数)
- 接口类中定义的参数都是常量,即public static final。只需要保留常量的类型+常量名+常量值
- 继承(实现)接口类使用关键字implements,继承多个接口用逗号分隔
- 继承(实现)接口类,必须重写接口中的方法
- implements可以实现多个接口