日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA知识基础(六):抽象

發布時間:2025/3/8 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA知识基础(六):抽象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

抽象類、抽象方法以及接口,這三個知識點是每個程序員必備的基礎,無論是在實際編程的時候,還是在面試的時候,都會出現這類問題,面試官很可能就會問你,interface和abstract的區別

當父類知道子類應該包含什么樣的方法,但無法確定子類如何實現這些方法;在分析事物時,會發現事物的共性,將共性抽取出,實現的時候,就會有這樣的情況:方法功能聲明相同,但方法功能主體不同,這時,將方法聲明抽取出,那么,此方法就是一個抽象方法。

2.抽象類小結

  • 抽象類和抽象方法都必須用abstract修飾符來修飾,抽象方法不能有方法體
  • 抽象類有構造器,但不能直接被實例化,要創建對象涉及向上轉型,主要是用于被其子類調用
  • 抽象類中可以沒有抽象方法,但是有抽象方法的類必定是抽象類
  • 抽象類中可以包含靜態方法
  • 抽象類不能用final修飾
  • 抽象類不能用private修飾
  • 抽象類也是類,一樣是用來繼承的,接口與類才是實現關系
  • 外部抽象類不能用Static修飾,但內部的抽象類可以使用static聲明
  • 抽象類可以繼承抽象類,抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體非抽象派生類必須覆蓋它們
  • 抽象類可以實現接口,可以把接口中方法映射到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現接口中方法
  • 3.抽象類組成分析

    普通類可以包含構造方法、普通方法、static方法、常量和變量等內容。而抽象類也是類,而且是一個特別的類,抽象類是指在普通類的結構里面選擇性的增加抽象方法并以abstract關鍵字將該類修飾,是的,每個抽象類不管有沒有抽象方法在其類結構中,abstract關鍵字非加不可。

    1、抽象類必須使用abstract修飾符來修飾,抽象方法也必須使用abstract修飾符來修飾,抽象方法不能有方法體。
    2、抽象類不能被實例化,無法使用new關鍵字來調用抽象類的構造器創建抽象類的實例。
    3、抽象類可以包含成員變量、方法(普通方法和抽象方法都可以)、構造器、初始化塊、內部類(接 口、枚舉)5種成分。
    4、抽象類的構造器不能用于創建實例,主要是用于被其子類調用。
    5、抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類
    6、abstract static不能同時修飾一個方法 (abstract方法沒有方法體不能直接調用,static方法可以直接調用,沖突)

    4.不能共存的關鍵字

    不能與抽象類(abstract)共存的關鍵字主要有三個,分別是final、private、static

    1、final
    final:抽象類不能用final修飾。因為抽象類一定要被abstract修飾,而且抽象類一定要被繼承否則該抽象類無意義。而被final修飾的類不能被繼承,也就是說不能有子類,所以二者沖突不能同時使用!

    2、private
    private: 抽象類不能用private修飾,只能用public或protected。首先要明確一點:被abstract修飾的類是為了讓非抽象子類看到并強制重寫。如果抽象類中有私有的抽象方法,那么該抽象方法不被子類所知,就無法被復寫。 而抽象方法出現的就是需要被復寫。

    3、static
    static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調用就可以了。眾所周知,抽象方法是沒有方法體的,可見運行也就沒意義了。雖然外部抽象類不能用Static修飾,但內部的抽象類卻可以使用static聲明

    //定義一個抽象類A abstract class A{//定義一個內部抽象類Bstatic abstract class B{ //static定義的內部類屬于外部類public abstract void saoMethod();} } class C extends A.B{public void saoMethod(){System.out.println("======saoMethod方法執行了======");} } public class StaticDemo {public static void main(String[] args) {A.B ab = new C();//向上轉型ab.saoMethod();} }

    運行結果: saoMethod方法執行了

    說白了抽象類的功能就是一個類定義模板的功能。

    5.關于接口(interface)

    接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。

    接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。

    6.抽象類與接口的區別

    下面比較一下兩者的語法區別:

    1.抽象類可以有構造方法,接口中不能有構造方法。
    2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
    3.抽象類中可以包含非抽象的普通方法,接口中的可以有非抽象方法,比如deaflut方法
    4.抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然 eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,并且默認即為public abstract類型。
    5.抽象類中可以包含靜態方法,接口中不能包含靜態方法
    6.抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認即為public static final類型。
    7.一個類可以實現多個接口,但只能繼承一個抽象類。

    注意
    有抽象方法不一定是抽象類,也可能是接口。抽象類不一定有抽象方法,可以有非抽象的普通方法。

    總結

    以上是生活随笔為你收集整理的JAVA知识基础(六):抽象的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。