关于java的接口
我们在上篇文章中讲解到了抽象类,本篇文章我们来介绍一下接口,接口是一个比抽象类还要抽象的东西,只有规范,自己没有办法写方法,也称之为专业的约束😀。
一、接口
- 普通类:只有具体实现。
- 抽象类:具体实现和规范(抽象方法)都有!
- 接口:只有规范!自己无法写方法,专业的约束!
- 约束和实现分离:面向接口编程。
二、接口的定义
- 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是鸟则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人。如果你是坏人,则必须欺负好人。
- 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
- OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计 模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。
三、接口的声明
- 声明类的关键字是class,声明接囗的关键字是interface。
我们新建一个软件包,新建一个UerService的接口,我们可以看到,应用关键字以后,Idea自动帮我们把类转换为了接口,就是绿色的I图标😉
package oop.Demo11;
public interface UserService
{
}
四、接口中的方法
- 接口中的方法 ,所有定义的方法其实都是抽象的。
- 定义方法可以直接写返回值类型和方法名字,也可以加参数。
package oop.Demo11;
public interface UserService
{
public abstract void run();//public abstract在编译器中是灰色,可以不写
void run();//定义方法可以直接写返回值类型和方法名字。
}
- 定义接口中的增删改查。
package oop.Demo11;
public interface UserService
{
void insert();//增
void delete();//删
void update();//改
void select();//查
}
- 接口都要有实现类,实现类的命名一般会用Impl结尾(第一个是 i)。
- 类可以实现接口,通过implements关键字实现。
package oop.Demo11;
public class UserServiceImpl implements UserService//这里会报错,因为需要重写方法
{
//ALT+INS
}
package oop.Demo11;
public class UserServiceImpl implements UserService
{
@Override
public void insert(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void select(String name) {
}
}
- 实现了接口的类,需要重写接口的方法。
五、接口类的实现
- 抽象类,只能是单继承,但是接口可以实现多继承。
我们再定义一个接口,名字叫做TimeService。
package oop.Demo11;
public interface TimeService
{
void timer();
}
- 多继承,就是在刚刚继承的接口后边,再继承一个接口。
package oop.Demo11;
public class UserServiceImpl implements UserService,TimeService
{
@Override
public void insert(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void select(String name) {
}
@Override
public void timer() {
}
}
- 类里面有方法的实现,但是接口里面只有方法的定义😀。
六、接口中的属性
- 接口中的属性都是常量。
package oop.Demo11;
public interface UserService
{
public static final int age=10;//public static final是灰色的
int age=10;
}
七、总结
- 约束!
- 定义方法,让不同的人实现。
- 接口中的方法都是抽象方法。
- 接口中的属性都是常量。
- 接口不能实例化,和抽象类一样不能new,因为没有构造方法。
- 接口可以实现多个,通过implements实现,但是必须要重写接口的方法。
- 抽象的思维,一个好的程序员或者更高层的架构师,他们的思维都是可以将现实抽象为程序的模型,自己实现接口等😊。