微信公衆號【Java技術江湖】一位阿里 Java 工程師的技術小站。做者黃小斜,專一 Java 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集羣、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!java
本文主要介紹了抽象類和接口的特性和使用方法。git
具體代碼在個人GitHub中能夠找到程序員
https://github.com/h2pl/MyTech
文章首發於個人我的博客:github
https://h2pl.github.io/2018/0...微信
1 抽象類通常會實現一部分操做,而且留一些抽象方法讓子類本身實現,好比Stringbuffer和Stringbuilder的父類abstractStringbuilder。2 接口通常指一種規定,好比一個map接口中,可能須要實現增刪改查等功能,若是你想實現一個具體map,這些方法就必須按照規定去實現。網絡
3 另外,一個類能夠實現多個接口,可是不能繼承多個類。
然而接口卻能夠繼承多個其餘接口。這一點很神奇。多線程
下面看一下具體的例子,有一些小細節平時可能不會注意。分佈式
class A { } interface M extends N,L{//正確的,不會報錯 } interface N{ } interface L{ } interface 接口 { public final int i = 1;//變量默認都爲public final修飾 final A a = null;//基本數據類型和引用都同樣 //protected void a();//報錯 //private //報錯 public abstract void a();// 方法都是public abstract修飾的。 //void b(){} 報錯,接口裏的方法不能有方法體,也不能有{},只能有(); // final void b(); // 注意,抽象方法不能加final。由於final方法不能被重寫。 //但若是抽象方法不被重寫那就沒有意義了,由於他根本沒有代碼體。 } abstract class 抽象類 { public final int i = 1;//變量並無被pulic和final修飾,只是通常的成員變量 public final A a = null; private void A(){}//抽象類能夠有具體方法 abstract void AA();//抽象方法沒有方法體 //private abstract void B();//報錯,組合非法 // 由於private修飾的方法沒法被子類重寫,因此和final同樣,使抽象方法沒法被實現。 } //抽象類也能夠被實例化,舉例說明 abstract class B{ B() { System.out.println("b init"); } } class C extends B{ C(){ super(); System.out.println("c init"); } } public class 接口對比抽象類 { @Test public void test() { C c = new C(); //結果先實例化B,再實例化C。 //由於會調用到父類的構造方法。 } }
關於final關鍵字的內容能夠在上一節查看:學習
https://blog.csdn.net/a724888...ui
關於代碼塊與代碼加載順序的內容能夠在下一節查看:
https://blog.csdn.net/a724888...
更多內容請關注微信公衆號【Java技術江湖】
這是一位阿里 Java 工程師的技術小站,做者黃小斜,專一 Java 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集羣、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!(關注公衆號後回覆」資料「便可領取 3T 免費技術學習資源以及我我原創的程序員校招指南、Java學習指南等資源)
**