1. 接口(interface)是抽象方法與常量值的集合;java
2. 從本質上來說,接口是一種特殊的抽象類,這種抽象類中只包含常量與方法的定義,而沒有變量和方法的實現;ide
3. 接口中聲明的屬性默認爲:public static final,也只能是:public static final,(接口中成員變量的定義);this
4. 接口中只能定義抽象方法,並且這些方法默認爲public,也只能是public的;對象
5. 接口能夠繼承其餘的接口,並添加新的屬性和抽象方法;blog
6. 多個無關的類能夠實現同一個接口,一個類能夠實現多個無關的接口;繼承
7. 與繼承關係相似,接口與實現類之間存在多態性:接口
多態的三個條件:繼承,重寫,父類引用指向子類對象;get
因爲Java中沒有多繼承,一個類只能有一個父類。一個父類能夠有多個子類,而在子類裏能夠重寫父類的方法;class
用接口能夠實現多繼承,一個類或是能夠同時實現多個接口;變量
通常而言,接口有利於代碼的擴展,而繼承則有利於代碼功能的修改
8. Demo
Demo_1
public interface Runner{ int id = 1; // 至關於:public static final int id = 1; public void start(); public void run(); public void stop(); }
// 正確
Demo_2
interface Singer{ public void sing(); public void sleep(); } class Sudents implements Singer{ private String name; public Sudents(String name) { this.name = name; } public void study(){ System.out.println("Studying"); } public String getName(){ return name; } public void sing() { // @Override System.out.println("Student is Singing"); } public void sleep() { // @Override System.out.println("Student is sleping"); } } // 正確
Demo_3
interface Singer{ public void sing(); public void sleep(); } interface Painter{ public void paint(); public void eat(); } class Student implements Singer{ private String name; public Student(String name) { this.name = name; } public void study(){ System.out.println("studying"); } public String getName(){ return name; } public void sing() { // @Override System.out.println("student is singing"); } public void sleep() { // @Override System.out.println("student is sleeping"); } } class Teacher implements Singer, Painter{ private String name; public Teacher(String name) { this.name = name; } public String getName(){ return name; } public void teach(){ System.out.println("teaching"); } public void paint() { // @Override System.out.println("teacher is painting"); } public void eat() { // @Override System.out.println("teacher is eating"); } public void sing() { // @Override System.out.println("teacher is singing"); } public void sleep() { // @Override System.out.println("teacher is sleeping"); } } public class Test { public static void main(String[] args){ Singer s1 = new Student("s1"); s1.sing(); s1.sleep(); Singer t1 = new Teacher("t1"); //至關於繼承中的父類引用指向子類對象 t1.sing(); t1.sleep(); Painter p1 = (Painter) t1; //至關於繼承中的父類引用指向子類對象 p1.paint(); p1.eat(); } }
// 正確
Demo_3的運行結果:
student is singing student is sleeping teacher is singing teacher is sleeping teacher is painting teacher is eating