Java接口的由来
学过C++的朋友都知道【多继承】这个概念
而在Java这种【完全面向对象】的语言中,多继承这个概念是没有的
但是有时候又必须用到【多继承】的某些特性
于是出现了【接口】这个概念
接口
接口代表着一个类所具有的方法的特征集合
如果一个【抽象类】中的所有方法都是【抽象】的
那么就可以将这个【抽象类】定义成一个【接口】
关键字 [ interface ] 和 [ implements ]
注意
接口中不能含有【非抽象方法】
接口是提供方法的特征的,都应该是抽象的
所以才被定义成【接口】
具体实例
我们定义一个汽车类【Car】
再定义两个接口,分别是【加汽油方法】的接口 和【给电动车充电】的接口
然后定义【电动车】类,继承【Car】类 并 实现【给电动车充电】的接口
然后定义【加油车】类,继承【Car】类 并 实现【加汽油方法】的接口
汽车类 Car
public class Car {
private String brand;
private String type;
private String num;
public Car(String brand,String type,String num)
{
this.brand = brand;
this.type = type;
this.num = num;
}
public void printCar()
{
System.out.println("品牌"+brand);
System.out.println("类型"+type);
System.out.println("车牌号"+num);
}
}
电力车接口 EleInf
public interface EleInf {
public void addEle(float eleCount);
}
用油车接口 OilInf
public interface OilInf {
public void addOil(float oilCount);//加汽油的接口
}
电力车类 EleCar-》继承 Car 类 并 实现 EleInf 接口
public class EleCar extends Car implements EleInf{
private float maxEleCount;
private float currentEleCount;
public EleCar(String brand,String type,String num,float maxEleCount,float currentEleCount)
{
super(brand,type,num);
this.maxEleCount = maxEleCount;
this.currentEleCount = currentEleCount;
}
public void addEle(float eleCount)
{
if((currentEleCount+eleCount) >maxEleCount)
{
System.out.println("电满了"+(currentEleCount+eleCount-maxEleCount));
}
else
{
this.currentEleCount+=eleCount;
}
}
}
用油车类 OilCar-》继承 Car 类 并 实现 OilInf 接口
public class OilCar extends Car implements OilInf {
private float maxOilCount;
private float currentOilCount;
public OilCar(String brand,String type,String num,float maxOilCount,float currentOilCount)
{
super(brand,type,num);
this.maxOilCount = maxOilCount;
this.currentOilCount = currentOilCount;
}
public void addOil(float oilCount)
{
if((currentOilCount+oilCount) >maxOilCount)
{
System.out.println("油溢出了"+(currentOilCount+oilCount-maxOilCount));
}
else
{
this.currentOilCount+=oilCount;
}
}
}
例子中的示意图
由图所示,Java中,接口是提供类似【多继承】功能的一种方法
又避免了【多继承】容易引发【二义性】的缺点