目录
定义与实现
定义
实现
示例
接口多态
示例
接口多继承
示例
定义与实现
定义
定义:用interface关键字来定义一个接口。接口就是规定定义一组规则。继承是一个“是不是”的关系,而接口实现则是“能不能”的关系。
接口格式:
[修饰符] interface 接口名[extends 父类接口名列表]{
[public] [static] [final]常量;
[public] [abstract]方法;//接口中的方法只有定义而没有实现
}
实现
实现:接口在定义后,可以在类中实现该接口。通过使用关键字implements让子类实现接口。
基本格式:
[修饰符] class<类名> [extends 父类名][impolements 接口列表]{}
示例
给出半径,求圆的面积和周长
interface CallInterface{ //定义一个接口
final float PI=3.14159f;//定义用于表示圆周率的变量PI
float getArea(float r);//定义一个用于计算面积的方法getArea()
float getCircumference(float r);//定义一个用于计算周长的方法getCircumstance()
}
public class Cire implements CallInterface{
public float getArea(float r){
float area=PI*r*r;//计算圆面积并赋值给变量area
return area;//返回计算后的圆面积
}
public float getCircumference(float r) {
float circumference=2*PI*r;//计算圆周长并赋值给变量circumference
return circumference;//返回计算后的圆周
}
public static void main(String[] args) {
Cire c=new Cire();
float f=c.getArea(2.0f);
System.out.println(Float.toString(f));
}
}
编译结果:
12.56636
接口多态
通过接口来引用类。定义一个接口类型的引用变量来引用实现接口的类示例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法。
示例interface InterA{ //定义接口InterA
void fun();
}
class B implements InterA{//实现接口InterA的类B
public void fun(){
System.out.println("This is B");
}
}
class C implements InterA{//实现接口InterA的类C
public void fun(){
System.out.println("This is C");
}
}
public class Test {
public static void main(String[] args) {
InterA a;
a=new B();
a.fun();
a=new C();
a.fun();
}
}
编译结果:
This is B This is C
上列充分利用了“一个接口,多个方法”,展示了java的动态多态性。
接口多继承
在java中,类的多继承是不合法的,但接口允许多继承。
示例public interface Attack {
public abstract void attack();
}
public interface medic {
public abstract void medictest();
}
public class medicman implements Attack,medic{
@Override
public void attack(){
System.out.println("医务兵也可以射击");
}
@Override
public void medictest(){
System.out.println("医务兵可以治疗他人");
}
}
public class shoottingman implements Attack{
@Override
public void attack(){
System.out.println("步兵可以攻击");
}
}
public class demotest {
public static void main(String[] args) {
shoottingman test=new shoottingman();
test.attack();
medicman test2=new medicman();
test2.medictest();
test2.attack();
}
}
编译结果:
示例可以得出:步兵只是继承了射击的接口,所以只能有射击的方法。医务兵同时继承了射击和医疗的接口,因此可以同时有射击和医疗的方法。



