Java接口
Java接口
创建抽象类是为了希望通过这个接口操作一系列类。
抽象方法:仅有声明而没有方法体
abstract void f();
包括抽象方法的类叫做抽象类。
假设从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的全部抽象方法提供方法定义。
假设不这样做。导出类便也是抽象类。
interfacekeyword使抽象的概念更向前迈进了一步。
interface这个keyword产生一个全然抽象的类,它根本没有提供不论什么详细的实现。它同意创建者确定方法名。參数列表,返回类型,可是没有不论什么方法体。
接口仅仅提供了形式,并未提供不论什么详细实现。
一个接口表示:全部实现了该特定接口的类看起来都应该是这个样子的。
要想一个类遵循某个特定接口,须要使用implementskeyword。
import java.util.*; enum Node{ MIDDLE_C,C_SHARP,B_FLAT } interface Instructment{ public void play(Node n); public void adjust(); } class Winds implements Instructment{ public void play(Node n){ System.out.println(this+".play() "+n); } public String toString(){ return "Winds"; } public void adjust(){ System.out.println(this+".adjust()"); } } class Percussion implements Instructment{ public void play(Node n){ System.out.println(this+".play() "+n); } public String toString(){ return "Percussion"; } public void adjust(){ System.out.println(this+".adjust()"); } } class Stringed implements Instructment{ public void play(Node n){ System.out.println(this+".play() "+n); } public String toString(){ return "Stringed"; } public void adjust() { System.out.println(this+".adjust()"); } } class Brass extends Winds{ public String toString(){ return "Brass"; } } class WoodWinds extends Winds{ public String toString(){ return "WoodWinds"; } } public class Music2{ public static void tune(Instructment i){ i.play(Node.MIDDLE_C); } static void tuneAll(Instructment[] e){ for(Instructment i:e) tune(i); } public static void main(String[] args){ Instructment[] e={ new Winds(), new Percussion(), new Stringed(), new Brass(), new WoodWinds() }; tuneAll(e); } }
多重继承:假设要从一个非接口的类继承,那么仅仅能从一个类继承,其余的基元素都必须是接口。须要将全部的接口名都置于implementskeyword之后。用逗号将它们一一隔开。
能够继承随意多个接口,并能够向上转型为每一个接口。由于每一个接口都是一个独立的类型。
import java.util.*; interface CanFight{ void fight(); } interface CanSwim{ void swim(); } interface CanFly{ void fly(); } class ActionCharacter{ public void fight(){ System.out.println("Fight"); } } class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{ public void swim(){ System.out.println("Swim"); } public void fly(){ System.out.println("Fly"); } } public class Adventure{ public static void t(CanFight x){ x.fight(); } public static void u(CanSwim x){ x.swim(); } public static void v(CanFly x){ x.fly(); } public static void w(ActionCharacter x){ x.fight(); } public static void main(String[] args){ Hero h=new Hero(); t(h); u(h); v(h); w(h); } }