Die wichtigste Rolle von Schnittstellen ist auch der wichtigste Grund für die Verwendung von Schnittstellen: Sie können auf mehrere Grundklassen zurückgeführt werden. Der zweite Grund für die Verwendung einer Schnittstelle ist derselbe wie für die Verwendung einer abstrakten Basisklasse: um zu verhindern, dass der Client-Programmierer ein Objekt dieser Klasse erstellt und angibt, dass es sich nur um eine Schnittstelle handelt. Dies wirft die Frage auf: Soll ich eine Schnittstelle oder eine abstrakte Klasse verwenden? Wenn wir Schnittstellen verwenden, können wir gleichzeitig die Vorteile abstrakter Klassen und Schnittstellen nutzen. Wenn die Basisklasse, die Sie erstellen möchten, also keine Methodendefinitionen oder Mitgliedsvariablen hat, sind Sie ohnehin bereit, eine Schnittstelle anstelle einer abstrakten Klasse zu verwenden. Wenn Sie im Voraus wissen, dass etwas eine Basisklasse sein wird, besteht Ihre erste Möglichkeit darin, es in eine Schnittstelle umzuwandeln. Abstrakte Klassen sollten nur dann in Betracht gezogen werden, wenn Methodendefinitionen oder Mitgliedsvariablen verwendet werden müssen.
/** * Created by xfyou on 2016/11/3. * Java 继承和接口演示 */ public class Adventure { static void t(CanFight x) { x.fight(); } static void u(CanSwim x) { x.swim(); } static void v(CanFly x) { x.fly(); } static void w(ActionCharacter x) { x.fight(); } public static void main(String[] args) { Hero i = new Hero(); t(i); u(i); v(i); w(i); } } interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } class ActionCharacter { // 父类中实现了子类中继承的接口方法 public void fight() { } } /** * 必须先 extends 然后再 impplements */ class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { @Override public void fly() { } @Override public void swim() { } }