抽象類與接口
抽象類和接口似乎在功能上沒什么區(qū)別,主要作用都是為了規(guī)范類的行為坚芜。然而屉佳,既然同時存在這兩種概念谷朝,那必然有其不同之處。
抽象類
什么是抽象類武花?用abstract關(guān)鍵字修飾的類即為抽象類圆凰。其特點是不能創(chuàng)建類的對象,可以包含抽象方法和非抽象方法体箕,抽象方法同樣用abstract關(guān)鍵字修飾专钉,且不可以有方法的實現(xiàn)。而衍生類中必須實現(xiàn)抽象方法累铅。
上代碼:
抽象類
public abstract class CoderClass { protected void normalMethod(){ System.out.println("我是抽象類的一般方法"); } //抽象方法不能具體實現(xiàn) protected abstract void codeSkill(); }
衍生類
public class JavaClass extends CoderClass { //非抽象方法可重寫可不重寫 //抽象方法必須實現(xiàn) protected void codeSkill() { System.out.println("我會用Java搬磚"); } } public class JavascriptClass extends CoderClass { //非抽象方法可重寫可不重寫 //抽象方法必須實現(xiàn) protected void codeSkill() { System.out.println("我會用JavaScript搬磚"); } }
接口
什么是接口跃须?接口可以看作是抽象類的延伸,接口完全禁止方法的實現(xiàn)娃兽,僅僅是聲明方法菇民。
上代碼:
接口
public interface ISkill { public void english(); }
實現(xiàn)接口類
public class HrClass implements ISkill { public void english() { System.out.println("我是hr,我會英語"); } } public class CoderClass implements ISkill { public void english() { System.out.println("我是程序猿投储,我也會英語"); } }
二者的區(qū)別
抽象類與接口主要的區(qū)別在于使用的情景上第练,抽象類是同類型對象的行為抽象,接口是不同類型對象的相同行為抽象玛荞。并且對于抽象類是采取繼承的方式來使用娇掏,為單繼承,而對于接口來說則是可以同時接入多個接口的勋眯。
例如代碼中的例子婴梧,對于程序員這一類人來說,都具備編碼能力客蹋,但是程序員有因為有人是用Java塞蹭,有人是用Javascript等等不同的語言編碼。所以可以將程序員看作抽象類嚼酝,而編碼能力作為抽象方法浮还。Java程序員,Javascript程序員為衍生類闽巩,而用Java或Javascript編碼的能力作為抽象方法的實現(xiàn)钧舌。
再例如担汤,對于程序員和Hr這兩類人來說,雙方的工作不同洼冻,但是都具備有英語能力崭歧,而雙方的英語側(cè)重點有有所不同。所以我們將英語能力抽象稱為接口方法撞牢,不同類的人均可以具備此能力率碾。
ps:以上為個人見解,如果對讀者能有所幫助那真是榮幸之至屋彪。如有錯誤坎弯,疏漏之處歡迎批評指正慧起,謝謝形娇。