java核心(十一):抽象類、接口

1、抽象類的相關限制
  1. 抽象類不能使用「final」關鍵字修飾,由於抽象類必需要由子類進行繼承,而後經過子類向上轉型進行實例化;
  2. 抽象類裏面會存在一些屬性,因此抽象類必定也會存在構造方法。抽象類經過子類進行實例化時,一樣知足:先實例化父類,再實例化子類的原則。
  3. 外部抽象類不容許使用static修飾,而內部抽象類可使用static修飾。使用static修飾的內部類,至關於一個外部抽象類,子類進行繼承時使用「外部類.內部類」。
  4. class Biology{ /** * 內部抽象類:使用static修飾 */
        abstract static class Animal{ public abstract String doing(); } } /** * 子類:繼承抽象類Animal */
    class Dog extends Biology.Animal{ @Override public String doing() { return "狗咬呂洞賓"; } } public class TestAbstract{ public static void main(String[] args) { Biology.Animal dog = new Dog(); System.out.println(dog.doing()); //狗咬呂洞賓
     } }
  5. 抽象類能夠有static方法,直接經過抽象類名稱」.」方法名稱(),進行調用。

 

/** * 有時候,因爲抽象類只須要一個特定的系統子類,此時能夠經過內部類來實現(避免了沒必要要的外部子類) */
abstract class Animal{ public abstract String doing(); /** * 經過內部子類,實例化抽象類 */
    public static Animal getInstance(){ return new Dog();   //經過內部子類,實例化抽象類
 } /** * 子類:繼承抽象類Animal * 私有內部類,在外部不可見 */
    private static class Dog extends Animal{ @Override public String doing() { return "狗咬呂洞賓"; } } } public class TestAbstract{ public static void main(String[] args) { Animal dog = Animal.getInstance(); System.out.println(dog.doing()); //狗咬呂洞賓
 } }

 

2、接口服務器

  1. 接口中,只能有抽象方法和全局常量。
  2. 接口中,訪問權限只能是public。若是類定義時,屬性未顯示用「public final static「修飾,則系統自動爲屬性添加以上修飾。若是方法爲顯示用「public」修飾,則系統自動添加「public」修飾。
  3. 子類只能繼承一個父類(普通類或抽象類),可是,接口可使用extends關鍵字,繼承多個接口。
  4. interface IAaa{ void fa(); } interface IBbb{ void fb(); } interface ICcc extends IAaa,IBbb{ void fc(); } /** * 子類: */
    class Child implements ICcc { @Override public void fa() { } @Override public void fb() { } @Override public void fc() { } }
  5. 接口中能夠包含內部類、內部抽象類、內部接口。
  6. interface Biology{ String printType(); /** * 內部接口: */
        interface Animal{ String eat(); String work(); } /** * 內部抽象類 */
        abstract class Plant{ public abstract String grow(); } } /** * 子類:實現外部接口 * 只須要重寫外部接口的抽象方法,和其中的內部類或內部接口無關 */ class Robot implements Biology{ @Override public String printType() { return "自能機器人"; } } /** * 子類:實現內部接口 */
    class Dog implements Biology.Animal { @Override public String eat() { return "狗啃骨頭"; } @Override public String work() { return "狗咬呂洞賓"; } } /** * 子類:實現內部抽象類 */
    class Bamboo extends Biology.Plant{ @Override public String grow() { return "芝麻開花節節高"; } } public class Test { public static void main(String[] args) { Biology robot = new Robot(); System.out.println(robot.printType()); //自能機器人
     Biology.Animal dog = new Dog(); System.out.println(dog.eat()); //狗啃骨頭
            System.out.println(dog.work());         //狗咬呂洞賓
     Biology.Plant bamboo = new Bamboo(); System.out.println(bamboo.grow()); //芝麻開花節節高
     } }

3、接口在實際開發之中有三大核心做用ide

  1. 定義不一樣層之間的操做標準
  2. 表示一種操做的能力
  3. 表示將服務器端的遠程方法試圖暴露給客服端

 

4、抽象類和接口的比較spa

No 區別 抽象類 接口
1 關鍵字 abstract interface
2 組成

構造方法、靜態方法、普通方法、抽象方法、code

常量、變量對象

抽象方法、全局常量
3 權限 可使用任意權限修飾符 只能使用public
4 關係 抽象類能夠實現多個接口

接口不能繼承抽象類,blog

接口能夠繼承多個接口繼承

5 子類使用 class 子類 extends 抽象類 class 子類 implement 接口一,接口二
6 限制 單繼承限制 沒有單繼承限制
7 重寫抽象方法 抽象類和接口都必須有子類,非抽象子類必須重寫全部的抽象方法 【同抽象類】
8 實例化方式 抽象類和接口,都是依靠子類對象向上轉型,進行實例化 【同抽象類】

 

5、其餘說明接口

  語法要求:定義類時,先寫繼承extends,再寫接口實現implements,不然,編輯時就會報錯。開發

class Dog extends AbstractFather implements IAnimal { ….. }
相關文章
相關標籤/搜索