Java零基礎_學Java必備的學習筆記(十六)Java繼承定義及使用

這是我參與8月更文挑戰的第7天,活動詳情查看:8月更文挑戰java

上篇說到Java-static關鍵字(下) 今天咱們開始學習有關Java繼承的知識。markdown

本篇文章主要內容:

  1. 瞭解繼承在java中有什麼做用
  2. 繼承的優缺點
  3. 在代碼上如何實現繼承

Java繼承定義

繼承是面向對象三大特徵之一,封裝居首位,封裝以後造成了獨立體,獨立體A和獨立體B之間可能存在繼承關係。其實程序中的繼承靈感來自於現實生活,在現實生活中繼承到處可見,例如,兒子繼承了父親的財產,兒子不須要努力就頗有錢。post

生活中的繼承:

圖1:現實世界中的繼承學習

繼承時子類繼承父類的特徵和行爲,使得子類對象(實例)具備父類的屬性,或子類從父類繼承方法,使得子類具備與父類相同的行爲。兔子和羊屬於食草動物類,獅子和豹屬於食肉動物類。食草動物和食肉動物又是屬於動物類。因此繼承須要符合的關係是:is-a(Bird is-a Animal),父類更通用,子類更具體。雖然食草動物和食肉動物都是屬於動物,可是二者的屬性和行爲上有差異,因此子類會具備父類的通常特性也會具備自身的特性。測試

爲何要使用繼承機制?在不一樣的類中也可能會有共同的特徵和動做,能夠把這些共同的特徵和動做放在一個類中,讓其它類共享。所以能夠定義一個通用類,而後將其擴展爲其它多個特定類,這些特定類繼承通用類中的特徵和動做。繼承是 Java 中實現軟件重用的重要手段,避免重複,易於維護。this

Java如何繼承

java中繼承的語法格式:spa

class 類名 extends 父類名{

類體;

}
複製代碼

爲何須要繼承,接下來咱們用如下這個需求來講明一下:code

public class Account { //銀行帳戶類
	//帳號
	private String actno;
	//餘額
	private double balance;
	//帳號和餘額的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
複製代碼
public class CreditAccount { //信用帳戶類
	//帳號
	private String actno;
	//餘額
	private double balance;
	//帳號和餘額的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	//信譽度(特有屬性)
	private double credit;
	//信譽度的set和get方法
	public double getCredit() {
		return credit;
	}
	public void setCredit(double credit) {
		this.credit = credit;
	}
}
複製代碼

以上兩個類分別描述了「銀行帳戶類」和「信用帳戶類」,信用帳戶類除了具備銀行帳戶類的特徵以外還有本身的特性,按照以上代碼的編寫方式,程序將會很是的臃腫,咱們將上面的程序修改成繼承方式,請看代碼:orm

public class Account { //銀行帳戶類
	//帳號
	private String actno;
	//餘額
	private double balance;
	//帳號和餘額的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
複製代碼
public class CreditAccount extends Account{ //信用帳戶類
	//信譽度(特有屬性)
	private double credit;
	//信譽度的set和get方法
	public double getCredit() {
		return credit;
	}
	public void setCredit(double credit) {
		this.credit = credit;
	}
}
複製代碼
public class AccountTest {
	public static void main(String[] args) {
		CreditAccount act = new CreditAccount();
		act.setActno("111111111");
		act.setBalance(9000.0);
		System.out.println(act.getActno() + "信用帳戶,餘額" + act.getBalance() + "元");
	}
}
複製代碼

運行結果以下圖所示:對象

圖2:繼承測試

經過以上的代碼,咱們能夠看到繼承是能夠解決代碼臃腫問題的,換句話說,繼承解決了代碼複用的問題,但這其實並非繼承最重要的做用,繼承最重要的做用是:有了繼承纔有了方法覆蓋和多態(後續的課程中詳細講解)

繼承有哪些特性呢?如下內容須要記憶:

● B類繼承A類,則稱A類爲超類(superclass)、父類、基類,B類則稱爲子類(subclass)、派生類、擴展類。

● java中的繼承只支持單繼承,不支持多繼承,C++中支持多繼承,這也是java體現簡單性的一點,換句話說,java中不容許這樣寫代碼:class B extends A,C{ }。

● 雖然java中不支持多繼承,但有的時候會產生間接繼承的效果,例如:class C extends B,class B extends A,也就是說,C直接繼承B,其實C還間接繼承A。

● java中規定,子類繼承父類,除構造方法和被private修飾的數據不能繼承外,剩下均可以繼承。

● java中的類沒有顯示的繼承任何類,則默認繼承Object類,Object類是java語言提供的根類(老祖宗類),也就是說,一個對象與生俱來就有Object類型中全部的特徵。

● 繼承也存在一些缺點,例如:CreditAccount類繼承Account類會致使它們之間的耦合度很是高,Account類發生改變以後會立刻影響到CreditAccount類。

接下來咱們來測試一下從Object類中繼承過來的方法,先來看一下Object類的部分源代碼:

圖3:Object類中toString()方法源代碼

咱們來嘗試調用這個方法,請看代碼以及執行結果:

public class ExtendsTest{
	public static void main(String[] args) {
		ExtendsTest et = new ExtendsTest();
		String s = et.toString();
		System.out.println(s);
	}
}
複製代碼

運行結果以下圖所示:

圖4:toString()方法執行結果

雖然輸出結果看不懂,可是起碼看到這個字符串當中確實是有一個「@」符號的,toString()方法確實被ExtendsTest類繼承過來了。

相關文章
相關標籤/搜索