接口工具
概念spa
Java接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,所以這些方法能夠在不一樣的地方被不一樣的類實現,而這些實現能夠具備不一樣的行爲(功能)。.net
特色設計
語法實現code
爲了聲明一個接口,咱們使用interface關鍵字,在接口中的全部方法都必須只聲明方法標識,而不聲明具體的方法體,由於具體的方法體的實現是由實現該接口的類完成,使用implments實現接口。接口中的默認屬性爲Public Static Final。一個類實現這個接口必須實現這個接口中定義的全部的抽象方法。對象
一個簡單的接口:擁有全局變量和抽象方法。blog
抽象類繼承
概念接口
普通類是一個完善的功能類,能夠直接產生實例化對象,而且在普通類中能夠包含有構造方法、普通方法、static方法、常量和變量等內容。而抽象類是指在普通類的結構裏面增長抽象方法的組成部分。那麼什麼叫抽象方法呢?在全部的普通方法上面都會有一個「{}」,這個表示方法體,有方法體的方法必定能夠被對象直接使用。而抽象方法,是指沒有方法體的方法,同時抽象方法還必須使用關鍵字abstract作修飾。而擁有抽象方法的類就是抽象類,抽象類要使用abstract關鍵字聲明。io
特色
【範例】
[public]interface 接口名稱 [extends父接口名列表] { //靜態常量 [public] [static] [final] 數據類型變量名=常量值; //抽象方法 [public] [abstract] [native] 返回值類型方法名(參數列表); } 實現接口格式: [修飾符] class 類名[extends 父類名] [implements 接口A,接口B,···] { 類成員變量和成員方法; 爲接口A中的全部方法編寫方法體,實現接口A; 爲接口B中的全部方法編寫方法體,實現接口B; }
//簡單接口
interface demoA{ //全局變量用默認用public static final修飾
final int a=6; //抽象方法默認用 public abstract 修飾
void show(); } //接口實現
class testDemoB implements demoA{ //實現接口中因此抽象方法
public void show(){ System.out.println("歡迎你"); } }
接口和抽象類的區別
public class Main extends JApplet public class Main implements Runnable public class Main extends JApplet implements ActionListener public class Main extends JApplet implements ActionListener, Runnable
轉型是在繼承的場景下的用法。
向上轉型:子類對象轉爲父類,父類能夠是接口。公式:Father f = new Son();
Father是父類或接口,son是子類。向上轉型不用強制轉型。
向下轉型:父類對象轉爲子類(爲了將向上轉型的對象還原)。
公式:
Father f; Son s = (Son)f;
向上轉型
向上轉型後父類的引用所指向的屬性是父類的屬性,若是子類重寫了父類的方法,那麼父類引用指向的或者調用的方法是子類的方法,這個叫動態綁定。
public class Animal { public void eat(){ System.out.println("animal"); } } public class Cat extends Animal{ public void eat(){ System.out.println("Cats"); } public void run(){ System.out.println("run"); } } public class Main { public static void main(String[] args) { Animal animal = new Cat(); //向上轉型
animal.eat(); // Cats // 向上轉型後父類引用不能調用子類本身的方法, 調用run方法會報錯
animal.run(); } }
向上轉型的做用,減小重複代碼,父類爲參數,調有時用子類做爲參數,就是利用了向上轉型。這樣使代碼變得簡潔。
public void eat(Animal animal){ animal.eat(); } // 全部繼承animal的均可以調用
eat(new Dog()); eat(new Cat());
向上轉型後沒法調用子類本來的特有的方法和屬性,爲此這裏引入向下轉型來還原。
向下轉型
向下轉型的前提是父類對象指向的是子類對象(也就是說,在向下轉型以前,它得先向上轉型)。
Animal a = new Cat(); Cat c = ((Cat) a); // 如下代碼會報錯
Animal a1 = new Animal(); Cat c1 = ((Cat) a1);
因此向下轉型前要先用instanceof進行判斷。
注意:
1.類與類之間的關係爲繼承,只能單繼承,但能夠多層繼承。
2.類與接口之間的關係爲實現,既能夠單實現,也能夠多實現。
3.接口與接口之間的關係爲繼承,既能夠單繼承,也能夠多繼承。
參考來源:https://blog.csdn.net/sysuzhyupeng/article/details/84890147