目录
画师:竹取工坊
大佬们好!我是Mem0rin!现在正在准备自学转码。
如果我的文章对你有帮助的话,欢迎关注我的主页Mem0rin,欢迎互三,一起进步!
前言:在现实中我们会遇到很多的接口:Type-C, USB,以及3.5mm耳机接口等等,这些接口能够推行的重要原因是:通用。
也就是说,接口作为公共的规范,是具有普遍性的抽象方法的集合。因此在Java中我们定义了接口(interface),作为抽象方法的集合。
一、接口的定义
在Java中,接口的定义是把定义类的class改成interface即可。
public interface IAnimal { public void eat();//在接口中,方法默认是public abstract的 public void travel(); int a = 1;//在接口中,成员变量默认是public static final的}在接口中,成员变量是默认被 public static final 修饰的,成员方法默认是被 public abstract 修饰的,因此在接口的成员方法和抽象方法一样,是没有主体的。
并且接口内是不允许出现静态代码块和构造方法的。
public interface IAnimal { //编译出错 public IAnimal() {
} {}//编译出错二、接口的使用
同时一个设备可以拥有多个接口,因此在使用过程中我们希望一个类可以实现多个接口,而不是继承中只能有一个父类。
在Java中,接口不能直接使用,我们用 implements 关键词来实现接口。
public class Dog implements IAnimal{
private String name;
public Dog(String name) { this.name = name; }
public void eat(){ System.out.println("Dog eats"); }
public void travel(){ System.out.println("Dog travels"); }
public int noOfLegs(){ return 0; }
public static void main(String args[]){ Dog dog = new Dog("旺财"); dog.eat(); dog.travel(); }}在具体的接口实现过程中,需要注意的是:
在实现接口的时候,需要重写接口的所有方法,除非实现接口的类本身也是抽象类(因为接口的方法默认是 public abstract 的)。
一个类可以实现多个接口,在类声明中语句类似于:
... implements 接口名称[, 其他接口, 其他接口..., ...] ...接口和类的异同见下图:

三、接口的继承
接口可以用 extends 关键字继承另一个接口,子接口会继承父接口的方法,比如以下实例:
public interface Sports{ public void setHomeTeam(String name); public void setVisitingTeam(String name);}
public interface Football extends Sports{ public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter);}
public interface Hockey extends Sports{ public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot);}四、接口的应用
我们说继承是 xx IS-A xxx,而接口则是 xxx具有某种属性,具体来讲,如果有 Dog, Cat, Duck 类,我们可以把三者抽象成一个 Animal 类,也可以只把部分对象的属性提取出来,比如 Dog 和 Duck 都会游泳,那我们就可以创建一个 ISwimming 的类,用来实现游泳的功能。
照着这样的思想我们可以写出以下示例:
Animal 类:
public class Animal { public String name;
public Animal(String name) { this.name = name; }
}IFlying、 ISwimming、 IRunning的接口:
public interface IFlying { void fly();}public interface ISwimming { void swim();}public interface IRunning { void run();}Bird 类:可以走可以飞
public class Bird extends Animal implements IFlying, IRunning{
public Bird(String name) { super(name); }
public void fly() { System.out.println("小鸟在飞"); }
public void run() { System.out.println("小鸟在走"); }}Dog 类:可以走可以游泳
public class Dog extends Animal implements IRunning, ISwimming{ public Dog(String name) { super(name); }
public void run() { System.out.println("小狗在走"); }
public void swim() { System.out.println("小狗在游泳"); }}Duck类:可以走可以飞可以游泳
public class Duck extends Animal implements ISwimming, IFlying, IRunning{
public Duck(String name) { super(name); }
public void fly() { System.out.println("鸭子在飞"); }
public void run() { System.out.println("鸭子在走"); }
public void swim() { System.out.println("鸭子在游泳"); }
}最后我们用 Test 类测试代码:
public class Test { public static void swim(ISwimming swim) { System.out.println("执行swim()"); swim.swim(); }
public static void run(IRunning run) { System.out.println("执行run()"); run.run(); }
public static void fly(IFlying fly) { System.out.println("执行fly()"); fly.fly(); }
public static void main(String[] args) { Dog dog = new Dog("旺财"); run(dog); swim(dog);
Bird bird = new Bird("jiji"); run(bird); fly(bird);
Duck duck = new Duck("gaga"); run(duck); swim(duck); fly(duck);
}
}得到的结果如下:
执行run()小狗在走执行swim()小狗在游泳执行run()小鸟在走执行fly()小鸟在飞执行run()鸭子在走执行swim()鸭子在游泳执行fly()鸭子在飞这也是多态的一种体现。
部分信息可能已经过时












