接口和抽象類的相同之處就是 都會有抽象方法編程
抽象方法就是一個沒有方法體 等待繼承的子類完成的方法ide
然而接口比較嚴格 它的方法必須是抽象方法且是公開的 學習
抽象類 能夠有本身的屬性 和 實體方法spa
1 package com.jay; 2 3 4 public abstract class Dog { 5 String kind = "dog"; 6 7 void playGame() { 8 System.out.println("The dog is playing game"); 9 } 10 11 abstract void makeMoney(); 12 }
有一個抽象類Dog,能夠把abstract理解成這是一個混子類,也就是這個Dog可能會有一些事本身不想作想讓別人去作code
這個Dog有本身得種類kind,指示本身只一條🐶對象
有一個本身方法playGame(),若是是本身特有的不讓兒子繼承的化,能夠加修飾符private。//很少解釋了blog
而後這個Dog這輩子沒有賺多少錢,但願兒子多賺點錢,將本身的遺願讓兒子繼承,因而有了抽象方法 makeMoney()繼承
兒子感動了因而打算完成父親的遺願賺錢因而乎接口
package com.jay; public class Son extends Dog{ @Override void makeMoney() { System.out.println("The son of dog made more money"); } }
這個兒子實現父親的遺願。數學
這是好的一方面,結果這個兒子也是不學無術,不想賺錢。因而乎
package com.jay; public abstract class Son extends Dog{ }
本身也成爲了一個混子,把這件沒有完成的事留給下個繼承人。
能夠看得出來抽象類它也是一個類。
首相用面向對象的思想來理解,類其實就是將生活中客觀存在的對象,將對象的屬性和特性封裝起來
而接口與類不一樣,它不能夠被實例化(這裏指單獨將接口實例化),由於它不能夠看成一個對象
接口能夠被理解爲一種技能,功能。好比一扇門門能夠有防盜及這個技能也能夠同時擁有報警的功能
也就是說 一個類能夠實現多個接口
這裏有一個學習的接口,定義了學習數學和學習計算機的方法,
package com.jay; public interface Learn { void learnMath(); void learnComputer(); }
而後這是一個烹飪的方法
package com.jay; public interface Cooking { void cookingFish(); void cookingBone(); }
而後這狗很勤勞都繼承這些技能,而且實現
1 package com.jay; 2 3 4 public class Son extends Dog implements Learn, Cooking { 5 6 @Override 7 void makeMoney() { 8 System.out.println("The son of dog made more money"); 9 } 10 11 @Override 12 public void cookingFish() { 13 System.out.println("cookingFish"); 14 } 15 16 @Override 17 public void cookingBone() { 18 System.out.println("cookingBone"); 19 } 20 21 @Override 22 public void learnMath() { 23 System.out.println("learnMath"); 24 } 25 26 @Override 27 public void learnComputer() { 28 System.out.println("learnComputer"); 29 } 30 }
固然若是是什麼都不去實現,也能夠在class上加abstract修飾符告訴他人這裏有未完成的方法
package com.jay; public abstract class Son extends Dog implements Learn, Cooking { }
固然你也是能夠加abstract修飾之後有選擇性的選擇幾個抽象方法去實現
然而每一個子類只能有一個父類
Java 是隻能單繼承的一門編程語語言
能夠這樣說,一個 木頭(object) 被製做(繼承) 成 一扇門 那麼這個物體就只能成爲門,它
就不能夠成爲汽車或者是電腦
抽象類和通常的類的區別就是 在抽象類中有抽象方法
抽象方法必須在抽象類中 當子類繼承一個抽象類的時候 子類必須完成父類的抽象方法
或者子類也成爲抽象方法
抽象類就是表示在這個類中有抽象方法(聲明一個沒有抽象方法的抽象類是沒有意義的)等待子類去實現抽象方法