Java基礎5:抽象類和接口

微信公衆號【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學習指南等資源)

**

相關文章
相關標籤/搜索