接口
关于接口,可以理解为是一种公共的行为规范,在具体实现时,只要符合规范标准,就可以通用。比如:叫做“IRunning”(跑)的接口,只要某个类在实现时符合这个接口内的行为规范(接口内的方法),就可以使用这个接口。
在Java当中,接口可以看成是:多个类的公共规范,是一种引用的数据类型。
1、接口的定义
定义接口的关键字:interface
接口的定义与类的定义基本相同,就是将class关键字换为interface关键字
//定义一个名为“IRunning”的接口
public interface IRunning {
}
注意事项:1、创建接口时,接口的命名一般以大写字母I开头
2、接口的命名一般使用“形容词”词性的单词
2、接口的使用
接口是不能直接使用的,接口的实现必须要有一个“实现类”来实现,该”实现类“必须要实现接口当中所有抽象方法。
“实现类”连接接口时使用的关键字是:implements
定义一个名为“IRunning”的接口:
public interface IRunning {
void iRunning();
}
注意:1、接口当中的方法默认是使用 public abstract 来修饰的,如上述例子所示,无论你在接口中写方法时写或不写 public abstract ,该方法都是抽象方法,所以接口当中的方法不能有具体的实现
2、接口当中的成员变量默认 public static final 修饰,定义的时候必须初始化,但是可以省略不写
2、但是接口当中有default修饰的方法和static修饰的方法是可以有具体的实现的(由于咱们一般用不上这样的方法,所以此处咱们就不做介绍,此处初学者也可暂时忽略)
写一个“Cat1”类连接“IRunning”接口
public class Cat1 implements IRunning{
private String name;
public Cat1(String name) {
this.name = name;
}
//重写接口“IRunning”当中的抽象方法
@Override
public void iRunning() {
System.out.println(this.name+"正在跑步");
}
}
注意:当一个实现了一个接口时,那么这个类就要重写实现的接口里的所有的抽象方法
(由于我这里只是举例,所以我的接口只写了一个抽象方法(接口当中可以写一个或多个抽象方法),所以我的“实现类里也只重写了一个抽象方法,大家在实际的应用中要根据具体情况来运用)
如果该类没有实现该接口所有的抽象方法,那么该类必须设置为抽象类
定义一个测试类“Test”来观察效果
public class Test1 {
public static void main(String[] args) {
Cat1 cat1=new Cat1("小猫");
cat1.iRunning();
}
}
运行结果
3、一个类可以实现多个接口
定义一个名为“IRunning”的接口:
public interface IRunning {
void iRunning();
}
定义一个名为“ISwimming”的接口:
public interface ISwimming {
void iSwimming();
}
定义一个名为“IFlying”的接口:
public interface IFlying {
void iFlying();
}
定义一个名为“Duck”的类:
public class Duck implements IRunning,ISwimming,IFlying{
private String name;
public Cat1(String name) {
this.name = name;
}
//重写接口“IFlying”当中的抽象方法
@Override
public void iFlying() {
System.out.println(this.name+"正在飞");
}
//重写接口“IRunning”当中的抽象方法
@Override
public void iRunning() {
System.out.println(this.name+"正在跑");
}
//重写接口“Iswimming”当中的抽象方法
@Override
public void iSwimming() {
System.out.println(this.name+"正在游泳");
}
}
注意:当一个类实现多个接口时,该类要重写所有接口当中所有的抽象方法
4、关于使用接口的优点
1、使用接口能够让类的调用者不需要关心类的具体类型,而只去关注这个类是否具有某种能力。
比如咱们上面定义的”IRunning“、“ISwimming”、“IFlying”三个接口,作为写程序的人(我)的本意是这三个接口分别有“跑”“游泳”“飞”的功能,所以当一个普通类具有这些功能的时候就可以去实现在三个接口,如后面写的名为“Duck”(鸭子)的类,该类具有这些功能,所以就可以去实现这三个类(其实也可以定义一个机器人的类去实现跑的这个接口,因为机器人也具有这种功能),所以说使用接口时我们不用去关心类的具体类型,而去关心类具有什么功能即可
2、类和类之间是单继承的,但一个类可以继承多个接口,可以提高代码的复用性
关于接口我就浅谈到这里,希望能帮助到刚开始接触接口这个知识点的小伙伴们!