**
Java中實作介面與繼承的區別
**
首先,先來了解一下什么是介面和繼承,介面一般是使用interface來定義的,介面定義同類的定義類似,分為介面的宣告和介面體,其中介面體由常量定義和方法定義兩部分組成,定義介面的基本格式如下:
[修飾符] interface 介面名 [extends 父介面名串列]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修飾符:可選,用于指定介面的訪問權限,可選值為public,如果省略則使用默認的訪問權限,
介面名:必選引數,用于指定介面的名稱,介面名必須是合法的Java識別符號,一般情況下,要求首字母大寫,
extends 父介面名串列:可選引數,用于指定要定義的介面繼承于哪個父介面,當使用extends關鍵字時,父介面名為必選引數,
方法:介面中的方法只有定義而沒有被實作,
例如,定義一個用于計算的介面,在該介面中定義了一個常量PI和兩個方法,具體代碼如下:
public interface CalInterface
{
final float PI=3.14159f;//定義用于表示圓周率的常量PI
float getArea(float r);//定義一個用于計算面積的方法getArea()
float getCircumference(float r);//定義一個用于計算周長的方法getCircumference()
}
此時需要注意的是:
與Java的類檔案一樣的,介面檔案的檔案名必須與介面名相同,
繼承:繼承是Java面向物件編程技術的一塊基石,因為它允許創建分等級層次的類,它是一種子類繼承父類的特征和行為,使得子類物件(實體)具有父親的實體域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為,
生活的繼承:

兔子和羊屬于食草動物類,獅子和豹屬于食肉動物類,
食草動物和食肉動物又是屬于動物類,
所以繼承需要符合的關系是:is-a,父類更通用,子類更具體,
雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類除了會具有父類的一般特性也會具有自身的特性,
繼承的特性:
-
子類擁有父類非private的屬性、方法;
-
子類可以擁有自己的屬性和方法,即子類可以就自己的功能需求對父類進行擴展;
-
子類可以用自己的方式實作父類的方法;
-
Java的繼承是單繼承,但是是可以多重繼承的,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如 A 類繼承 B 類,B 類繼承 C 類,所以按照關系就是 C 類是 B 類的父類,B 類是 A 類的父類,這是 Java 繼承區別于 C++ 繼承的一個特性;
-
提高了類之間的耦合性,但是也會帶來一些問題,如果耦合度高的話會造成代碼之間越緊密,代碼的獨立性就越差,
在Java中,介面的實作和繼承的實作很類似的,寫法上是幾乎是一致的,就是關鍵字這一部分不一樣,即實作介面使用的關鍵字為implements,而繼承使用的關鍵字為extends,代碼如下:
實作介面的代碼:
public class ButtonListener implements ActionListener {}
實作介面型別的寫法與解釋:
//事件處理類
//實作介面一定要實作(重寫)介面中所有的抽象方法
//實作介面(繼承):implements
//public class 子類 implements 介面,介面,,{}
//一個子類后面能夠實作很多個介面的
//實作介面一定要實作(重寫)介面中所有的抽象方法
//ActionListener只是一個介面,也可以換成其他的介面的,所以下面必須是public void actionPerformed(ActionEvent e)的,抽象方法需與介面保持一致的
實作介面的代碼例子:
public class ButtonListener implements ActionListener {
//參考傳遞
//定義文本框變數,用來保存傳遞過來的文本框物件
public JTextField jt;
//動作處理方法
public void actionPerformed(ActionEvent e){
//獲取文本框內容
String userName = jt.getText();
//比較內容是否一樣: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);
//設定可見
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);
//設定可見
jf.setVisible(true);
}
}
}
繼承的代碼:
public class UNStudent extends Student{}
繼承型別寫法與解釋:
/**
* 大學生類
* 繼承:extends
* public class 子類(派生類) extends 父類(基類) implements 介面,介面,,{}
* 繼承中父類只有一個,并不像介面一樣可以擁有很多個,
* 子類會繼承父類中的屬性和方法,私有屬性和方法不能直接使用
* @author liu
*/
繼承的代碼例子:
public class UNStudent extends Student{
public void printName(){
System.out.println("名字:"+getName());
}
//方法重寫(覆寫)
//1.有繼承關系的兩個類之間 2.回傳值型別,方法名,引數型別(個數,順序)完全一樣
public void study(){
System.out.println("子類重寫父類的學習方法!");
}
}
綜上所述:
實作介面與繼承的區別有:
1.不同的關鍵字,即實作介面(implements),繼承(extends);
2.在面向物件編程的時候只能是單繼承,但是實作介面可以有多個,簡單點說,就是實作介面可以有好多個,但是繼承的中父類只能只有一個,因為父親只有一個,這說明了繼承在Java中具有單根性,子類只能去繼承一個父類;
3.在介面中只能定義全域變數和抽象方法,而在繼承中可以定義屬性方法,變數,常量的等等…
4.當某個介面被實作的時候,在類中一定要用介面中的抽象方法,而繼承中子類能隨意呼叫父類的屬性和方法,毫無壓力的;
5.當你需要去呼叫介面時,介面中的抽象方法是一定需要寫上去的,即使在抽象方法你并不需要去實作什么樣的功能,但這個步驟是一定不能少的;但是在繼承中并不是這樣的,當子類需要實作的功能和父類中的實作功能毫無差別的時候,則父類中的實作方法可寫可不寫,但是當你想要在你的子類中去實作某些特有的功能時,這時候需要將父類中的實作方法去重寫,以實作在子類中所需要的特定功能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/167033.html
標籤:AI
上一篇:eclipse+jdk安裝以及會遇到的問題+解決方法
下一篇:JAVA+字串常量池介紹
