接口
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有
-
接口:只有规范(可以将约束和实现分离)
声明类的关键字是class,声明接口的关键字为interface
接口都需要有实现类
-
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是……则必须……”的思想
-
接口的本质是契约,就像我们的法律一样,制定好后大家都要遵守
-
面向对象的精髓,是对对象的抽象,能体现出这一点的就是接口。设计模式所研究的,实际上就是如何合理地去抽象
-
定义了一个UserService的接口,并定义了4个方法
-
注意事项:
-
1、接口里面只有方法声明,没有方法的具体实现
-
2、接口里面所有方法默认都是public abstract的
-
3、 接口里面的所有属性默认都是public static final 的
-
4、接口里面的所有抽象方法都必须由对应的实现类来实现
-
package OOP.Demointerface;
//interface 定义接口的关键字 接口都需要有实现类
public interface UserService {
double PI = 3.14;
//定义4个增删改查的方法(没有具体的实现,只有返回值类型、方法名和参数列表),如需实现接口里面的方法,必须创建一个对应方法的实现类,同过 实现类 来重写接口里面的方法来实现方法
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
接着带定义一个TimeService的接口,并定义了一个方法(可以定义多个接口,后用implements关键字类实现接口)
package OOP.Demointerface;
public interface TimeService {
void timer();
}
通过implements关键字,并重写两个接口的所有方法来实现接口多继承
package OOP.Demointerface;
//抽象类 需要extends 存在局限性:只能单继承
//类 可以通过 implements 关键字来实现接口 可以实现多继承
//利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService{//这就从侧面实现了多继承(实现了UserService,TimeService这两个接口)
//要实现接口,就必须重写接口中的所有方法
//重写了UserService接口中的add/delete/update/query4个方法
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
//重写了TimeService接口中的timer()方法
@Override
public void timer() {
}
}
总结
-
1、接口也是一种约束
-
2、接口可以定义一些方法让不同的人实现
-
3、接口中的方法都是public abstract(抽象)的
-
4、接口中的常量都是public ststic final的
-
5、和抽象类一样,接口也不能被直接实例化,因为接口中没有构造方法
-
6、通过implements关键字,接口可以实现多继承,但必须要重写接口中所有的方法