最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中比較抽象類與接口的異同

 更新時間:2021年12月20日 11:50:05   作者:cookies_k  
大家好,本篇文章主要講的是Java中比較抽象類與接口的異同,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

一.抽象類

(一)概念

? ? ? 在繼承的層次結構中,每個新的子類都使類變得更加明確和具體。如果從一個子類向父類追溯,類就會變得更通用、更加不明確。類的設計應該確保父類包含它的子類的共同特征。有時候,一個父類設計得非常抽象,以至于它都沒有任何具體的實例。這樣的類稱為抽象類(abstract class)。在類的頭部使用?abstract?修飾符表示該類為抽象類。

(二)抽象類和抽象方法

? ? ? ?同樣用?abstract?聲明抽象方法。抽象方法(abstract method)只定義成員方法的接口形式,而沒有具體操作。只有派生類對抽象成員方法的重定義才能真正實現與該派生類相關的操作。在各子類繼承了父類的抽象方法之后,再分別用不同的語句和方法體來重新定義它,形成若干個名字相同、返回值相同、參數列表相同、目的一致但是具體實現有一定差別的方法。抽象類中定義抽象方法的目的是實現一個接口,即所有的子類對外都呈現一個相同名字的方法。

1.一個包含抽象方法的類必須聲明為抽象類

? ? 幾點說明:

? ?1.抽象類不一定有抽象方法,但有抽象方法的類一定是抽象類。

? ?2.即使子類的父類是具體的,這個子類也可以是抽象的。

? ?3.當父類的方法實現在子類中變得無效時,子類可以重寫父類的方法并將它定義為抽象的。

2.抽象方法只有定義而沒有實現,它的實現由子類提供

? 下面定義了一個抽象類Object類:

public abstract class Object {
	public abstract double getArea();
	public abstract double getPerimeter();
}

Object類是多個子類的父類,由于在多個子類中都要用到getArea()方法和getPermeter()方法,所以在父類中定義比較好;由于計算面積和周長的getArea()方法和getPermeter()方法在不同子類里的實現方式不同,所以Object類中定義的這兩個方法的實現只能由子類提供。

3.抽象類無法被直接實例化,可以讓子類繼承然后實例化子類

? 通過一個例子來說明:

public abstract class Person {
	//定義一個抽象方法
	public abstract void isSmoke();
}
 
//學生類
class Students extends Person{
	//繼承抽象類后抽象類中的抽象方法必須在子類中實現
	public void isSmoke() {
		System.out.print("Students can't smoke.");
	}
}
 
//教師類
class Teachers extends Person{
	public void isSmoke() {
		System.out.print("Teachers can smoke.");
	}
}

(三)使用抽象類的意義

? ? ? ?因為抽象類不能實例化對象,必須要有子類來實現它之后才能使用。這樣就可以把一些具有相同屬性和方法的組件進行抽象,更有利于代碼和程序的維護。同時,抽象類也是Java面向對象的一個重要體現。

二.接口

(一)概念

? ? ? ? ?接口(Interface),在Java編程語言中是一個抽象類型,是象方法的集合。

? ? ? ? ?接口通常以? ?interface??來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。

? ? 接口有以下特性:

接口是隱式抽象的,當聲明一個接口的時候,不必使用abstract關鍵字。接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract關鍵字。接口中的方法都是公有的。

(二)語法

?1. 定義:一個簡單的接口擁有全局變量和抽象方法。在接口中的所有方法都必須只聲明方法標識,而不要去聲明具體的方法體,因為具體的方法體的實現是由繼承該接口的類來去實現的。

?接口定義的一般形式為:

?[訪問控制符]interface <接口名> {

? ? ? ? ?類型標識符final 符號常量名n = 常數;

? ? ? ? ?返回值類型? 方法名([參數列表]);

? ? ? ? ?…

?}????????

? 定義接口實例:

interface Human {
	
	//定義一個全局變量
	final String txt="吸煙有害健康";
	
	//定義一個抽象方法
	public void isSmoke();
}

?2.實現:要實現接口,就必須去實現接口規(guī)定的方法,只有把接口規(guī)定的抽象方法都給實現了,才承認這個類實現了這個接口,實現了這個接口代表的某種功能。使用 implements 關鍵字實現接口。

? 實現接口實例:

class Student implements Human{
	 
	public void isSmoke() {
		System.out.println("Students can't smoke.");
	}
	
	public static void main(String[] args) {
		Student h=new Student();  
        h.isSmoke();  
        System.out.println(txt);
	}
}

3.接口的繼承

??子接口可以對父接口的方法和常量進行重寫。例如:

// 接口 Student 繼承 Human
public interface Student extends Human {
 
    // 重寫父接口中的txt
    String txt = "未成年禁止吸煙";  
    
    // 重寫父接口中的isSmoke()方法
    void isSmoke();  
}

?注意: 在Java中,類的多繼承是不合法的,但接口允許多繼承。

public interface C extends A, B

三.比較抽象類與接口

Q: 為什么有了抽象類還要接口?

看起來抽象類除了多繼承以外,完全可以完成接口所作的事情,為什么還需要定義接口呢?

1、避免java單繼承的局限
2、避免多繼承帶來的復雜性和低效性
3、面向接口編程帶來的優(yōu)勢。降低程序間的耦合,易擴展,易維護

?Q: 如何確定在什么情況下應該使用接口,什么情況下應該使用類呢?

? ? ? ? 抽象類和接口都是用來指定多個對象的共同特征的。那么如何確定在什么情況下應該使用接口,什么情況下應該使用類呢?一般來說,清晰描述父子關系的強的“是......的一種”關系應該用類建模。弱的“是..的一種”關系也稱為類屬關系,它表明對象擁有某種屬性,可以用接口來建模。

類型抽象類接口定義abstract關鍵字interface關鍵字繼承可以繼承一個類和實現多個接口;子類只可以繼承一個抽象類接口只可以繼承接口(一或多);子類可以實現多個接口方法實現可定義構造方法,可以有抽象方法和具體方法無構造方法,且方法都是抽象的,也沒有方法的實現實現方式子類使用extend關鍵字來繼承抽象類。如果子類不是抽象類,需要提供抽象類中所有聲明的方法的實現子類使用關鍵字implements來實現接口。需要提供接口中所有聲明的方法的實現作用把相同的東西提取出來,即重用把程序模塊進行固化的契約,降低耦合

到此這篇關于Java中比較抽象類與接口的異同的文章就介紹到這了,更多相關Java抽象類與接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • idea2020導入spring5.1的源碼詳細教程

    idea2020導入spring5.1的源碼詳細教程

    這篇文章主要介紹了idea2020導入spring5.1的源碼的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Jenkins安裝和插件管理配置入門教程

    Jenkins安裝和插件管理配置入門教程

    這篇文章主要介紹了Jenkins安裝和插件管理知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 詳解Android系統(tǒng)中的root權限獲得原理

    詳解Android系統(tǒng)中的root權限獲得原理

    這篇文章主要介紹了詳解Android系統(tǒng)中的Root權限獲得原理,安卓基于Linux,所以原理也相當于Linux中的root用戶,需要的朋友可以參考下
    2015-08-08
  • 輕量級聲明式的Http庫——Feign的獨立使用

    輕量級聲明式的Http庫——Feign的獨立使用

    這篇文章主要介紹了輕量級聲明式的Http庫——Feign的使用教程,幫助大家更好的理解和學習使用feign,感興趣的朋友可以了解下
    2021-04-04
  • MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存)

    MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存)

    這篇文章主要介紹了MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • eclipse導入工程報錯問題項目或者文件有紅叉的解決方案

    eclipse導入工程報錯問題項目或者文件有紅叉的解決方案

    這篇文章主要介紹了eclipse導入工程報錯問題項目或者文件有紅叉的解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Java線程隊列LinkedBlockingQueue的使用

    Java線程隊列LinkedBlockingQueue的使用

    本文主要介紹了Java線程隊列LinkedBlockingQueue的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 解決Mybatis中result標簽識別不了的情況

    解決Mybatis中result標簽識別不了的情況

    這篇文章主要介紹了解決Mybatis中result標簽識別不了的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java中Calendar時間操作常用方法詳解

    Java中Calendar時間操作常用方法詳解

    這篇文章主要為大家詳細介紹了Java中Calendar時間操作常用方法,calendar中set方法和靜態(tài)屬性帶來的一些坑,感興趣的小伙伴們可以參考一下
    2016-05-05
  • SpringCloud?OpenFeign?服務調用傳遞?token的場景分析

    SpringCloud?OpenFeign?服務調用傳遞?token的場景分析

    這篇文章主要介紹了SpringCloud?OpenFeign?服務調用傳遞?token的場景分析,本篇文章簡單介紹?OpenFeign?調用傳遞?header?,以及多線程環(huán)境下可能會出現的問題,其中涉及到?ThreadLocal?的相關知識,需要的朋友可以參考下
    2022-07-07

最新評論

鞍山市| 山丹县| 罗山县| 建始县| 张家界市| 保亭| 通许县| 阆中市| 鹤壁市| 广宁县| 九江市| 普安县| 剑川县| 滨州市| 抚宁县| 三河市| 和平县| 阿拉善盟| 罗田县| 白城市| 固阳县| 秀山| 保山市| 抚州市| 乳源| 丰宁| 伽师县| 饶河县| 灵璧县| 洛川县| 永顺县| 水城县| 屏边| 甘南县| 洛浦县| 咸丰县| 丘北县| 靖州| 铅山县| 云阳县| 牡丹江市|