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

Java中實現(xiàn)接口與繼承的區(qū)別及說明

 更新時間:2024年03月25日 09:35:36   作者:feng之鋒  
這篇文章主要介紹了Java中實現(xiàn)接口與繼承的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java實現(xiàn)接口與繼承的區(qū)別

首先,先來了解一下什么是接口繼承。

接口一般是使用interface來定義的。

接口定義同類的定義類似,分為接口的聲明接口體,其中接口體常量定義方法定義兩部分組成。

定義接口的基本格式

如下:

[修飾符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
  • 修飾符:可選,用于指定接口的訪問權(quán)限,可選值為public。如果省略則使用默認(rèn)的訪問權(quán)限。
  • 接口名:必選參數(shù),用于指定接口的名稱,接口名必須是合法的Java標(biāo)識符。一般情況下,要求首字母大寫。
  • extends 父接口名列表:可選參數(shù),用于指定要定義的接口繼承于哪個父接口。當(dāng)使用extends關(guān)鍵字時,父接口名為必選參數(shù)。
  • 方法:接口中的方法只有定義而沒有被實現(xiàn)。

例如,定義一個用于計算的接口,在該接口中定義了一個常量PI和兩個方法

具體代碼如下

public interface CalInterface 
{
    final float PI=3.14159f;//定義用于表示圓周率的常量PI
    float getArea(float r);//定義一個用于計算面積的方法getArea()
    float getCircumference(float r);//定義一個用于計算周長的方法getCircumference()
}

此時需要注意的是:

與Java的類文件一樣的,接口文件的文件名必須與接口名相同。

繼承:繼承是Java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因為它允許創(chuàng)建分等級層次的類,它是一種子類繼承父類的特征和行為,使得子類對象(實例)具有父親的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

生活的繼承

兔子和羊?qū)儆谑巢輨游镱?,獅子和豹屬于食肉動物類。

食草動物和食肉動物又是屬于動物類。

所以繼承需要符合的關(guān)系是:is-a,父類更通用,子類更具體。

雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類除了會具有父類的一般特性也會具有自身的特性。

繼承的特性

  • 子類擁有父類非private的屬性、方法;
  • 子類可以擁有自己的屬性和方法,即子類可以就自己的功能需求對父類進行擴展;
  • 子類可以用自己的方式實現(xiàn)父類的方法;
  • Java的繼承是單繼承,但是是可以多重繼承的,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如 A 類繼承 B 類,B 類繼承 C 類,所以按照關(guān)系就是 C 類是 B 類的父類,B 類是 A 類的父類,這是 Java 繼承區(qū)別于 C++ 繼承的一個特性;
  • 提高了類之間的耦合性,但是也會帶來一些問題,如果耦合度高的話會造成代碼之間越緊密,代碼的獨立性就越差。
  • 在Java中,接口的實現(xiàn)和繼承的實現(xiàn)很類似的,寫法上是幾乎是一致的,就是關(guān)鍵字這一部分不一樣,即實現(xiàn)接口使用的關(guān)鍵字為implements,而繼承使用的關(guān)鍵字為extends。

代碼如下:

實現(xiàn)接口的代碼:

public class ButtonListener implements ActionListener {}

實現(xiàn)接口類型的寫法與解釋:

//事件處理類
//實現(xiàn)接口一定要實現(xiàn)(重寫)接口中所有的抽象方法
//實現(xiàn)接口(繼承):implements
//public class 子類 implements 接口,接口,,{}
//一個子類后面能夠?qū)崿F(xiàn)很多個接口的
//實現(xiàn)接口一定要實現(xiàn)(重寫)接口中所有的抽象方法
//ActionListener只是一個接口,也可以換成其他的接口的,所以下面必須是public void actionPerformed(ActionEvent e)的,抽象方法需與接口保持一致的

實現(xiàn)接口的代碼例子:

public class ButtonListener implements ActionListener { 
	//引用傳遞
	//定義文本框變量,用來保存?zhèn)鬟f過來的文本框?qū)ο?
	public JTextField jt;
	
	
	//動作處理方法
	public void actionPerformed(ActionEvent e){
		//獲取文本框內(nèi)容
		String userName = jt.getText();
		
		//比較內(nèi)容是否一樣:equals
		//比較地址是否一樣:==
		if("123".equals(userName)){
			System.out.println("yes");
			JFrame jf = new JFrame();
			jf.setSize(400, 400);
			jf.setTitle("對話框");
			JLabel jl = new JLabel("賬號密碼驗證成功");
			jf.add(jl);
			jf.setLocationRelativeTo(null);
			//設(shè)置可見
			jf.setVisible(true);
		}
		else{
			System.out.println("no");
			JFrame jf = new JFrame();
			jf.setSize(600, 600);
			jf.setTitle("對話框");
			JLabel jl = new JLabel("賬號密碼驗證失敗",JLabel.CENTER);
			
			jf.add(jl);
			jf.setLocationRelativeTo(null);
			
		
			
			//設(shè)置可見
			jf.setVisible(true);
		}
	}
}

繼承的代碼:

public class UNStudent extends Student{}

繼承類型寫法與解釋

/**
 * 大學(xué)生類
 * 繼承:extends
 * public class 子類(派生類) extends 父類(基類) implements 接口,接口,,{}
 * 繼承中父類只有一個,并不像接口一樣可以擁有很多個。
 * 子類會繼承父類中的屬性和方法,私有屬性和方法不能直接使用
 * @author liu
 */

繼承的代碼例子:

public class UNStudent extends Student{

	public void printName(){
		System.out.println("名字:"+getName());
	}
	//方法重寫(覆蓋)
	//1.有繼承關(guān)系的兩個類之間     2.返回值類型,方法名,參數(shù)類型(個數(shù),順序)完全一樣
	public void study(){
		System.out.println("子類重寫父類的學(xué)習(xí)方法!");
		}
}

綜上所述

實現(xiàn)接口與繼承的區(qū)別

1.不同的關(guān)鍵字,即實現(xiàn)接口(implements),繼承(extends);

2.在面向?qū)ο缶幊痰臅r候只能是單繼承,但是實現(xiàn)接口可以有多個,簡單點說,就是實現(xiàn)接口可以有好多個,但是繼承的中父類只能只有一個,因為父親只有一個,這說明了繼承在Java中具有單根性,子類只能去繼承一個父類;

3.在接口中只能定義全局變量和抽象方法,而在繼承中可以定義屬性方法,變量,常量的等等…

4.當(dāng)某個接口被實現(xiàn)的時候,在類中一定要用接口中的抽象方法,而繼承中子類能隨意調(diào)用父類的屬性和方法,毫無壓力的;

5.當(dāng)你需要去調(diào)用接口時,接口中的抽象方法是一定需要寫上去的,即使在抽象方法你并不需要去實現(xiàn)什么樣的功能,但這個步驟是一定不能少的;但是在繼承中并不是這樣的,當(dāng)子類需要實現(xiàn)的功能和父類中的實現(xiàn)功能毫無差別的時候,則父類中的實現(xiàn)方法可寫可不寫,但是當(dāng)你想要在你的子類中去實現(xiàn)某些特有的功能時,這時候需要將父類中的實現(xiàn)方法去重寫,以實現(xiàn)在子類中所需要的特定功能。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 重寫hashCode()和equals()方法詳細(xì)介紹

    重寫hashCode()和equals()方法詳細(xì)介紹

    這篇文章主要介紹了重寫hashCode()和equals()方法詳細(xì)介紹,涉及重寫equals()方法,重寫hashCode()方法,重寫equals()而不重寫hashCode()的風(fēng)險等相關(guān)內(nèi)容的介紹,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • springboot如何實現(xiàn)導(dǎo)入其他配置類

    springboot如何實現(xiàn)導(dǎo)入其他配置類

    這篇文章主要介紹了springboot如何實現(xiàn)導(dǎo)入其他配置類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • ActiveMQ中consumer的消息確認(rèn)機制詳解

    ActiveMQ中consumer的消息確認(rèn)機制詳解

    這篇文章主要介紹了ActiveMQ中consumer的消息確認(rèn)機制詳解,對于broker而言,只有接收到確認(rèn)指令,才會認(rèn)為消息被正確的接收或者處理成功了,InforSuiteMQ提供以下幾種Consumer與Broker之間的消息確認(rèn)方式,需要的朋友可以參考下
    2023-10-10
  • Java實現(xiàn)音頻添加自定義時長靜音的示例代碼

    Java實現(xiàn)音頻添加自定義時長靜音的示例代碼

    這篇文章主要介紹了一個Java工具類,可以實現(xiàn)給一個wav音頻添加自定義時長靜音。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-01-01
  • Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹

    Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹

    本文主要介紹Java 高并發(fā)多線程的知識,這里整理詳細(xì)的資料來解釋線程的知識,有需要的學(xué)習(xí)高并發(fā)的朋友可以參考下
    2016-09-09
  • 帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理

    帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理

    這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-08-08
  • 淺談Sharding-JDBC強制路由案例實戰(zhàn)

    淺談Sharding-JDBC強制路由案例實戰(zhàn)

    本文主要介紹了淺談Sharding-JDBC強制路由案例實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 淺談Arrays.asList()方法的使用

    淺談Arrays.asList()方法的使用

    本文主要介紹了Arrays.asList()方法的使用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • jdk環(huán)境變量配置切換jdk版本及安裝jdk后環(huán)境變量不生效問題解決辦法

    jdk環(huán)境變量配置切換jdk版本及安裝jdk后環(huán)境變量不生效問題解決辦法

    這篇文章主要介紹了jdk環(huán)境變量配置切換jdk版本及安裝jdk后環(huán)境變量不生效問題解決辦法,包括配置JAVA_HOME、Path和CLASSPATH,以及如何驗證配置是否成功,文章還講解了如何切換JDK版本,并解決了安裝新JDK后環(huán)境變量配置不生效的問題,需要的朋友可以參考下
    2024-12-12
  • Java中常用的設(shè)計模式之建造者模式詳解

    Java中常用的設(shè)計模式之建造者模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java中常用的設(shè)計模式之建造者模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論