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

淺談Java抽象類(lèi)和接口的個(gè)人理解

 更新時(shí)間:2017年12月22日 14:56:50   作者:HelloWhy  
這篇文章主要介紹了淺談Java抽象類(lèi)和接口的個(gè)人理解,具有一定借鑒價(jià)值,需要的朋友可以參考下。

今天來(lái)說(shuō)一波自己對(duì)Java中抽象類(lèi)和接口的理解,含參考內(nèi)容:

一、抽象類(lèi)

1、定義:

public abstract class 類(lèi)名{}

Java語(yǔ)言中所有的對(duì)象都是用類(lèi)來(lái)進(jìn)行描述,但是并不是所有的類(lèi)都是用來(lái)描述對(duì)象的。我所理解的抽象類(lèi)其實(shí)就是對(duì)同一類(lèi)事物公共部分的高度提取,這個(gè)公共部分包括屬性和行為。比如牛、羊、豬它們的公共屬性是都有毛,公共行為是都哺乳,所以我們可以把公共部分抽象成一個(gè)哺乳類(lèi),含有屬性毛和行為哺乳,當(dāng)牛、羊、豬繼承了哺乳類(lèi)后也就有了哺乳的功能,至于怎么完成這個(gè)功能就需要自己去實(shí)現(xiàn)了。

2、特點(diǎn)

(1)被Abstract關(guān)鍵字修飾的類(lèi)是抽象類(lèi);

(2)含有抽象方法的類(lèi)一定是抽象類(lèi),但是抽象類(lèi)不一定含有抽象方法;且抽象方法必須是public或protected,否則不能被子類(lèi)繼承。默認(rèn)為public。

(3)抽象方法中不能有實(shí)現(xiàn),否則編譯報(bào)錯(cuò);

(4)抽象類(lèi)中可以定義自己的成員變量和成員方法;

(5)子類(lèi)繼承抽象類(lèi)時(shí),必須實(shí)現(xiàn)抽象類(lèi)中的所有抽象方法,否則該子類(lèi)也要被定義為抽象類(lèi);

(6)抽象類(lèi)不能被實(shí)例化。

3、驗(yàn)證以上規(guī)定是否確實(shí)如其所述

這是我在word中編輯的一張驗(yàn)證表,把它截成圖片放在這里:

從上圖的驗(yàn)證結(jié)果來(lái)看,那些理論都是正確的

二、接口

1、定義:

public interface 接口名{}

接口是用來(lái)提供方法的。按我的理解,它是對(duì)多個(gè)類(lèi)公共行為的高度提取,比如所有的動(dòng)物它們的公共行為是吃和睡,那么我們就可以將這兩個(gè)行為提取出來(lái)封裝在一個(gè)接口中,當(dāng)某個(gè)動(dòng)物需要執(zhí)行這個(gè)行為的時(shí)候只要調(diào)用該接口,然后在自己的類(lèi)里面完成具體實(shí)現(xiàn)就行。這樣理解好像跟抽象類(lèi)沒(méi)什么區(qū)別,那再看下面的這個(gè)例子。如果把這兩個(gè)行為放在抽象類(lèi)中,但是該抽象類(lèi)中還有一個(gè)爬的行為,此時(shí)當(dāng)一種爬行動(dòng)物,比如蛇,當(dāng)它繼承這個(gè)類(lèi)的時(shí)候,會(huì)實(shí)現(xiàn)吃、睡、爬行這三個(gè)方法,于是它便有了吃、睡、爬的功能;但是如果一個(gè)飛行類(lèi)的動(dòng)物如鳥(niǎo),當(dāng)它繼承了這個(gè)方法的時(shí)候,同樣的也有了吃、睡、爬的功能,很明顯,爬不是它需要的功能,這就有點(diǎn)詞不達(dá)意了,但是當(dāng)他們繼承了只有吃、睡的接口,就有了吃、睡的基本功能,至于爬和飛,可以抽象出來(lái)放在抽象類(lèi)中,按需繼承,按需實(shí)現(xiàn)自己需要的功能就OK了。

2、特點(diǎn):

(1)接口中可以有自己的成員變量,但會(huì)被隱式地指定為public staic final,而且也只能是public staic final的,接口中所有的方法都是抽象方法,都會(huì)被隱式地指定為public abstract的。

(2)接口中只定義抽象方法,沒(méi)有具體的實(shí)現(xiàn);

(3)實(shí)現(xiàn)接口的類(lèi)必須實(shí)現(xiàn)接口中定義的所有方法;

3、驗(yàn)證以上理論是否正確

同樣,驗(yàn)證出上面的理論都是對(duì)的!

三、抽象類(lèi)和接口的區(qū)別:

1、抽象類(lèi)中可以有自己的成員方法及它們的具體實(shí)現(xiàn);接口中只能含有抽象方法;

2、抽象類(lèi)中可以含有各種類(lèi)型的成員變量;接口中的成員變量只能是public static final的;

3、一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但可以實(shí)現(xiàn)多個(gè)接口;

4、抽象類(lèi)中可以含有靜態(tài)代碼塊和靜態(tài)方法;接口中不能定義靜態(tài)代碼塊和靜態(tài)方法;

驗(yàn)證一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但能實(shí)現(xiàn)多個(gè)接口

首先,定義兩個(gè)抽象類(lèi):一個(gè)Mummals哺乳類(lèi),一個(gè)Crawler爬行類(lèi)

/**
 * @createtime 2017年3月17日 上午10:33:27
 * @description 哺乳類(lèi) 
 */
public abstract class Mammals {
	public String foods;
	public abstract void nurse();
	public void eat(String food){
		this.foods = food;
		System.out.println("吃"+foods);
	}
}
/**
 * 
 * @createtime 2017年3月17日 上午11:23:09
 * @description 定義一個(gè)抽象類(lèi)--爬行類(lèi)
 */
public abstract class Crawler {
	public abstract void crawl();
}

其次,定義兩個(gè)接口:一個(gè)是BaseAction基礎(chǔ)接口;一個(gè)是SpecialAction特殊接口

/**
 * 
 * @createtime 2017年3月17日 上午11:03:42
 * @description 定義一個(gè)名為基本行為的接口
 */
public interface BaseAction {
	public String name = "";
	public void eat();
	public void sleep();
}
/**
 * @createtime 2017年3月17日 上午11:24:56
 * @description 定義一個(gè)接口用來(lái)實(shí)現(xiàn)特殊行為
 */
public interface SpecialAction {
  
  public void study();
}

然后,定義一個(gè)基礎(chǔ)類(lèi)People,繼承Mummals類(lèi),實(shí)現(xiàn)BaseAction接口和SpecialAction接口

/**
 * @createtime 2017年3月17日 上午11:25:48
 * @description 定義一個(gè)普通的類(lèi)--人類(lèi),繼承哺乳類(lèi),實(shí)現(xiàn)基礎(chǔ)接口和特殊接口
 */
public class People extends Mammals implements BaseAction,SpecialAction{
	@Override
	  public void study() {
		// TODO Auto-generated method stub
	}
	@Override
	  public void eat() {
		// TODO Auto-generated method stub
	}
	@Override
	  public void sleep() {
		// TODO Auto-generated method stub
	}
	@Override
	  public void nurse() {
		// TODO Auto-generated method stub
	}
}

可以看出,一個(gè)子類(lèi)是可以實(shí)現(xiàn)多個(gè)接口的

最后,讓基礎(chǔ)類(lèi)People,同時(shí)繼承Mummals類(lèi)和Crawler類(lèi)

/**
 * @createtime 2017年3月17日 上午11:25:48
 * @description 定義一個(gè)普通的類(lèi)--人類(lèi),繼承哺乳類(lèi),實(shí)現(xiàn)基礎(chǔ)接口和特殊接口
 */
public class People extends Mammals,Crawler{
	@Override
	  public void nurse() {
		// TODO Auto-generated method stub
	}
}

總結(jié)

以上就是本文關(guān)于淺談Java抽象類(lèi)和接口的個(gè)人理解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Spring中bean的繼承與抽象代碼示例

Hibernate核心思想與接口簡(jiǎn)介

java中接口(interface)及使用方法示例

如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Java反射概念與使用實(shí)例代碼

    Java反射概念與使用實(shí)例代碼

    JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法,下面這篇文章主要給大家介紹了關(guān)于Java反射概念與使用的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java?在?Array?和?Set?之間進(jìn)行轉(zhuǎn)換的示例

    Java?在?Array?和?Set?之間進(jìn)行轉(zhuǎn)換的示例

    這篇文章主要介紹了Java如何在Array和Set之間進(jìn)行轉(zhuǎn)換,在本文章中,我們對(duì)如何在?Java?中對(duì)Array和Set進(jìn)行轉(zhuǎn)換進(jìn)行一些說(shuō)明和示例,需要的朋友可以參考下
    2023-05-05
  • 教你怎么用SpringBoot整合Swagger作為API

    教你怎么用SpringBoot整合Swagger作為API

    這篇文章主要介紹了教你怎么用SpringBoot整合Swagger作為API,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java之線(xiàn)程池使用與原理全面解析

    Java之線(xiàn)程池使用與原理全面解析

    這篇文章主要介紹了Java之線(xiàn)程池使用與原理全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法

    Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法

    Ribbon?內(nèi)置了?7?種負(fù)載均衡策略:輪詢(xún)策略、權(quán)重策略、隨機(jī)策略、最小連接數(shù)策略、重試策略、可用性敏感策略、區(qū)域性敏感策略,并且用戶(hù)可以通過(guò)繼承?RoundRibbonRule?來(lái)實(shí)現(xiàn)自定義負(fù)載均衡策略,對(duì)Spring?Cloud?Ribbon負(fù)載均衡策略相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • Java 反射機(jī)制實(shí)例詳解

    Java 反射機(jī)制實(shí)例詳解

    這篇文章主要介紹了Java 反射機(jī)制實(shí)例詳解的相關(guān)資料,這里對(duì)java中反射機(jī)制進(jìn)行了詳細(xì)的分析,需要的朋友可以參考下
    2017-09-09
  • 全網(wǎng)最全SpringBoot集成swagger的詳細(xì)教程

    全網(wǎng)最全SpringBoot集成swagger的詳細(xì)教程

    swagger是當(dāng)下比較流行的實(shí)時(shí)接口文文檔生成工具,swagger分為swagger2?和swagger3兩個(gè)常用版本,二者區(qū)別不是很大,主要對(duì)于依賴(lài)和注解進(jìn)行了優(yōu)化,swagger2需要引入2個(gè)jar包,swagger3只需要一個(gè),用起來(lái)沒(méi)有什么大的區(qū)別,本文給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2022-08-08
  • 詳解spring項(xiàng)目中如何動(dòng)態(tài)刷新bean

    詳解spring項(xiàng)目中如何動(dòng)態(tài)刷新bean

    這篇文章主要為大家介紹了詳解spring項(xiàng)目中如何動(dòng)態(tài)刷新bean,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    這篇文章主要介紹了新版IDEA使用Spring Initializr創(chuàng)建工程(兩種方法,官方工具和IDEA),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-10-10
  • Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

    Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Mybatis中傳遞多個(gè)參數(shù)的4種方法,并且介紹了關(guān)于使用Mapper接口時(shí)參數(shù)傳遞方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04

最新評(píng)論