package com.sky.bean; public interface People { public abstract void printPeopleType(); //抽象方法,實現類必須得重寫它 }
package com.sky.bean; public class Student implements People { @Override public void printPeopleType() { System.out.print("\n學生"); } }
package com.sky.bean; public class Teacher implements People { @Override public void printPeopleType() { System.out.print("\n老師"); } }
一、 對外只是以一個函數名的形式,沒有實際實現內容,保護源碼java
二、實現統一入口,多個實現的擴展ide
package com.sky.run; import com.sky.bean.People; //接口 import com.sky.bean.Student;//People接口的實現類 1 import com.sky.bean.Teacher;//People接口的實現類 2 public class Main { public static void main(String[] args) { //可擴展成不一樣的實現 printPeopleType(new Student()); //輸出學生 printPeopleType(new Teacher()); //輸出老師 } private static void printPeopleType(People people) { //統一入口 people.printPeopleType(); } }
1. 接口不能用於實例化對象,但能夠聲明,後面能夠new 實例化它的實現類給這個接口聲明對象。函數
2. 接口沒有構造方法。spa
3. 接口中全部的方法必須是抽象方法。(java新特性,容許接口方法爲非抽象!).net
4. 接口不能包含成員變量,寫了不能使用,由於不能實例化接口,如何調用?除了 static 和 final 變量。由於能夠直接經過類名調用!code
5. 一個接口實現類能夠同時實現多個接口類。對象
package com.sky.bean; public class Student implements People,People2 { @Override public void printPeopleType() { System.out.print("\n學生"); } @Override public void printPeopleType2() { System.out.print("\n學生2"); } }
package com.sky.run; import com.sky.bean.People; //接口 import com.sky.bean.Student;//People接口的實現類 1 import com.sky.bean.Teacher;//People接口的實現類 2 public class Main { public static void main(String[] args) { //可擴展成不一樣的實現 Student student = new Student(); printPeopleType(student); //輸出接口1:People ----學生1 student.printPeopleType2();// 輸出接口2:People2 ----學生2 printPeopleType(new Teacher()); } private static void printPeopleType(People people) { //統一入口 people.printPeopleType(); } }
1. 抽象類除了不能實例化對象以外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類同樣。因爲抽象類不能實例化對象,因此抽象類必須被繼承,才能被使用。繼承
父類(抽象類)接口
package com.sky.service; public abstract class Father { public String a = " 經過super取得父類的屬性值 a"; public void fun1(){ System.out.print("\n 這是 Father.fun1()"); } }
子類(繼承父類)get
package com.sky.service; public class Child extends Father { //重寫 @Override public void fun1(){ System.out.print("\n 這是 Father.fun1() 在子類被 重寫"+super.a); } //重載 public void fun1(String str){ System.out.print("\n 這是 Father.fun1() 在子類被 "+str+super.a); } public void fun2(){ System.out.print("\n 這是 子類本身獨有的方法,非繼承方法"); } }
不能實例化父類,由於它是抽象類,須要經過繼承它的子類訪問它的屬性和方法
Child child = new Child(); child.fun1(); //重寫父類的方法 child.fun1("重載"); //重載父類的方法 child.fun2(); //子類新增的方法,非繼承
2. 而接口類是什麼都沒有,就只有一個空殼子!