接口
接口主要是用来定义标准的。
为什么要使用接口呢?假设现在有这样一个情况,我先定义了一个动物类(Animal)(具有name、age、color等属性,以及eat、drink和sleep等方法),然后再定义一个鸟类(Bird)并让Bird去继承Animal. 与此同时再定义一个飞机类(airPlane),我想要让鸟类和飞机类都具有飞行这个方法,那么如何去实现呢?难道再定义一个飞行类然后再让鸟和飞机去继承它吗?但Java中只允许单根继承,虽然然用多层继承可以解决这个问题,但是让一个鸟类和飞机类去继承一个飞行类在逻辑上似乎说不过去。于是为了解决这一问题,就出现了接口。接口就是外挂的功能。接口允许多实现,也就是说你想给一个类什么功能就可以去实现对应的接口
下面就是一个实现接口的示例
//定义飞行接口
public interface Fly {
//定义一个飞行的方法
public void fly();
}
//定义鸟类
public class Bird implements Fly{
String name;//名字
public Bird() {
}
public Bird(String name) {
this.name = name;
}
//重写接口中的方法
@Override
public void fly() {
System.out.println(name+"在飞");
}
}
//定义飞机类
public class Plane implements Fly {
String type;//飞机型号
public Plane() {
}
public Plane(String type) {
this.type = type;
}
//重写接口中的方法
@Override
public void fly() {
System.out.println(type + "在飞");
}
}
//定义测试类
public class Test {
public static void main(String[] args) {
Bird bird = new Bird("秃鹰");
bird.fly();
Plane plane = new Plane("歼16");
plane.fly();
}
}
接口和抽象类的区别
抽象类一般用来做父类,目的是代码重用。接口一般用来扩展功能,目的是扩展系统,提供对外访问,统一标准。
接口可以用extends多继承其他接口,从而实现标准的扩展和方法的扩展。一个类只能继承一个直接父类,但可以实现多个接口。
//攻击接口
public interface Attack {
public void attack();
}
//治疗接口
public interface Treatment {
public void treatTment();
}
//击杀接口(多继承)
public interface Keil extends Attack,Treatment{
public void keil();
}
//防御接口
public interface Defense {
public void defense();
}
//英雄类实现多接口(在实现类中要重写接口中的所有方法)
public class Hero implements Keil,Defense{
@Override
public void attack() {
System.out.println("攻击");
}
@Override
public void keil() {
System.out.println("击杀");
}
@Override
public void defense() {
System.out.println("防御");
}
@Override
public void treatTment() {
System.out.println("治疗");
}
}