欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.抽象類

(一)概念

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

(二)抽象類和抽象方法

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

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

? ? 幾點(diǎn)說明:

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

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

? ?3.當(dāng)父類的方法實(shí)現(xiàn)在子類中變得無效時(shí),子類可以重寫父類的方法并將它定義為抽象的。

2.抽象方法只有定義而沒有實(shí)現(xiàn),它的實(shí)現(xiàn)由子類提供

? 下面定義了一個(gè)抽象類Object類:

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

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

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

? 通過一個(gè)例子來說明:

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

(三)使用抽象類的意義

? ? ? ?因?yàn)槌橄箢惒荒軐?shí)例化對(duì)象,必須要有子類來實(shí)現(xiàn)它之后才能使用。這樣就可以把一些具有相同屬性和方法的組件進(jìn)行抽象,更有利于代碼和程序的維護(hù)。同時(shí),抽象類也是Java面向?qū)ο蟮囊粋€(gè)重要體現(xiàn)。

二.接口

(一)概念

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

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

? ? 接口有以下特性:

接口是隱式抽象的,當(dāng)聲明一個(gè)接口的時(shí)候,不必使用abstract關(guān)鍵字。接口中每一個(gè)方法也是隱式抽象的,聲明時(shí)同樣不需要abstract關(guān)鍵字。接口中的方法都是公有的。

(二)語法

?1. 定義:一個(gè)簡單的接口擁有全局變量和抽象方法。在接口中的所有方法都必須只聲明方法標(biāo)識(shí),而不要去聲明具體的方法體,因?yàn)榫唧w的方法體的實(shí)現(xiàn)是由繼承該接口的類來去實(shí)現(xiàn)的。

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

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

? ? ? ? ?類型標(biāo)識(shí)符final 符號(hào)常量名n = 常數(shù);

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

? ? ? ? ?…

?}????????

? 定義接口實(shí)例:

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

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

? 實(shí)現(xiàn)接口實(shí)例:

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.接口的繼承

??子接口可以對(duì)父接口的方法和常量進(jìn)行重寫。例如:

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

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

public interface C extends A, B

三.比較抽象類與接口

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

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

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

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

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

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

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

相關(guān)文章

  • java發(fā)起http請(qǐng)求調(diào)用post與get接口的方法實(shí)例

    java發(fā)起http請(qǐng)求調(diào)用post與get接口的方法實(shí)例

    在實(shí)際開發(fā)過程中,我們經(jīng)常需要調(diào)用對(duì)方提供的接口或測試自己寫的接口是否合適,下面這篇文章主要給大家介紹了關(guān)于java發(fā)起http請(qǐng)求調(diào)用post與get接口的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 遠(yuǎn)程debug調(diào)試入門

    遠(yuǎn)程debug調(diào)試入門

    這篇文章主要介紹了Eclipse的Debug調(diào)試技巧大全(總結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧嗎,希望能給你帶來幫助
    2021-06-06
  • java設(shè)計(jì)模式之模板方法模式詳解

    java設(shè)計(jì)模式之模板方法模式詳解

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之模板方法模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺析JAVA常用JDBC連接數(shù)據(jù)庫的方法總結(jié)

    淺析JAVA常用JDBC連接數(shù)據(jù)庫的方法總結(jié)

    本篇文章是對(duì)在JAVA中常用JDBC連接數(shù)據(jù)庫的方法進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友參考下
    2013-07-07
  • Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳)

    Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳)

    本篇文章主要介紹了Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Spring中的@Scheduled定時(shí)任務(wù)注解詳解

    Spring中的@Scheduled定時(shí)任務(wù)注解詳解

    這篇文章主要介紹了Spring中的@Scheduled定時(shí)任務(wù)注解詳解,要使用@Scheduled注解,首先需要在啟動(dòng)類添加@EnableScheduling,啟用Spring的計(jì)劃任務(wù)執(zhí)行功能,這樣可以在容器中的任何Spring管理的bean上檢測@Scheduled注解,執(zhí)行計(jì)劃任務(wù),需要的朋友可以參考下
    2023-09-09
  • Java中的this、super、final關(guān)鍵字詳解

    Java中的this、super、final關(guān)鍵字詳解

    這篇文章主要介紹了Java中的this、super、final關(guān)鍵字詳解,它在方法內(nèi)部使用,表示這個(gè)方法所屬對(duì)象的引用,它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對(duì)象,this 可以調(diào)用類的屬性、方法和構(gòu)造器,需要的朋友可以參考下
    2023-09-09
  • Java中BigDecimal除法使用不當(dāng)導(dǎo)致精度問題

    Java中BigDecimal除法使用不當(dāng)導(dǎo)致精度問題

    本文主要介紹了Java中BigDecimal除法使用不當(dāng)導(dǎo)致精度問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時(shí)時(shí)間配置

    Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時(shí)時(shí)間配置

    Hutool是一個(gè)Java基礎(chǔ)工具類,對(duì)文件、流、加密解密、轉(zhuǎn)碼、正則、線程、XML等JDK方法進(jìn)行封裝,組成各種Util工具類,這篇文章主要給大家介紹了關(guān)于Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時(shí)時(shí)間配置的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • spring中bean id相同引發(fā)故障的分析與解決

    spring中bean id相同引發(fā)故障的分析與解決

    最近在工作中遇到了關(guān)于bean id相同引發(fā)故障的問題,通過查找相關(guān)資料終于解決了,下面這篇文章主要給大家介紹了因?yàn)閟pring中bean id相同引發(fā)故障的分析與解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評(píng)論