大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java教程
Java標識符與關鍵字
Java變量
Java數據類型
Java運算符
Java控制語句
Java方法
Java面向對象
Java對象的創建和使用
Java封裝
Java中static和this
Java繼承
Java方法覆蓋和多態
Java super
Java基礎練習題

Java方法覆蓋

本章節目標:

理解在什么情況下我們需要進行方法覆蓋?掌握在滿足什么條件的時候構成方法覆蓋?什么是多態,代碼怎么寫?向上轉型和向下轉型都是什么?多態在開發中有什么作用?

知識框架:

Java方法覆蓋Override

Java方法覆蓋Override

學習方法覆蓋之前,我們先來回顧一下方法重載(overload),什么情況下考慮使用方法重載呢?在同一個類當中,如果功能相似,盡可能將方法名定義的相同,這樣方便調用的同時代碼也會美觀。那么,代碼滿足什么條件的時候能夠構成方法重載呢?只要在同一個類當中,方法名相同,參數列表不同(類型、個數、順序),即構成方法重載。

帶著同樣的疑問去學習方法覆蓋,什么是方法覆蓋?什么情況下考慮方法覆蓋?代碼怎么寫的時候就構成了方法覆蓋呢?接下來看一段代碼:

public class People {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void speakHi(){
		System.out.println(this.name + "和別人打招呼!");
	}
}
public class ChinaPeople extends People {
//中國人
}
public class AmericaPeople extends People {
//美國人
}
public class PeopleTest {
	public static void main(String[] args) {
		ChinaPeople cp = new ChinaPeople();
		cp.setName("張三");
		cp.speakHi();
		AmericaPeople ap = new AmericaPeople();
		ap.setName("jackson");
		ap.speakHi();
	}
}

運行結果如下圖所示:

Java開發

圖13-1:運行結果

“中國人”調用speakHi()方法希望輸出的結果是“你好,我叫張三,很高興見到你!”,“美國人”調用speakHi()方法更希望輸出的結果是“Hi,My name is jackson,Nice to meet you!”,可見ChinaPeople和AmericaPeople從父類中繼承過來的speakHi()方法已經不夠子類使用了,那這個時候應該怎么辦呢?當然,此時就需要使用方法覆蓋機制了。請看以下代碼:

public class People {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void speakHi(){
		System.out.println(this.name + "和別人打招呼!");
	}
}
public class ChinaPeople extends People {
	public void speakHi(){
		System.out.println("你好,我叫"+this.getName()+",很高興認識你!");
	}
}
public class AmericaPeople extends People {
	public void speakHi(){
		System.out.println("Hi,My name is "+this.getName()+",Nice to meet you!");
	}
}
public class PeopleTest {
	public static void main(String[] args) {
		ChinaPeople cp = new ChinaPeople();
		cp.setName("張三");
		cp.speakHi();
		AmericaPeople ap = new AmericaPeople();
		ap.setName("jackson");
		ap.speakHi();
	}
}

運行結果如下圖所示:

Java方法覆蓋

圖13-2:方法覆蓋之后的運行結果

以上程序中ChinaPeople和AmericaPeople將從People類中繼承過來的speakHi()方法進行了覆蓋,我們也看到了當speakHi()方法發生覆蓋之后,子類對象會調用覆蓋之后的方法,不會再去調用之前從父類中繼承過來的方法。

那么,到底在什么情況下我們會考慮使用方法覆蓋呢?通過以上內容的學習,我們了解到只有當從父類中繼承過來的方法無法滿足當前子類業務需求的時候,需要將父類中繼承過來的方法進行覆蓋。換句話說,父類中繼承過來的方法已經不夠用了,子類有必要將這個方法重新再寫一遍,所以方法覆蓋又被稱為方法重寫。當該方法被重寫之后,子類對象一定會調用重寫之后的方法。

那么,當程序具備哪些條件的時候,就能構成方法覆蓋呢?

● 方法覆蓋發生在具有繼承關系的父子類之間,這是首要條件;

●  覆蓋之后的方法與原方法具有相同的返回值類型、相同的方法名、相同的形式參數列表;

● 另外,在使用方法覆蓋的時候,需要有哪些注意事項呢?

● 由于覆蓋之后的方法與原方法一模一樣,建議在開發的時候采用復制粘貼的方式,不建議手寫,因為手寫的時候非常容易出錯,比如在Object類當中有toString()方法,該方法中的S是大寫的,在手寫的時候很容易寫成小寫tostring(),這個時候你會認為toString()方法已經被覆蓋了,但由于方法名不一致,導致最終沒有覆蓋,這樣就尷尬了;

● 私有的方法不能被繼承,所以不能被覆蓋;

● 構造方法不能被繼承,所以也不能被覆蓋;

● 覆蓋之后的方法不能比原方法擁有更低的訪問權限,可以更高(學習了訪問控制權限修飾符之后你就明白了);

● 覆蓋之后的方法不能比原方法拋出更多的異常,可以相同或更少(學習了異常之后就明白了);

● 方法覆蓋只是和方法有關,和屬性無關;

● 靜態方法不存在覆蓋(不是靜態方法不能覆蓋,是靜態方法覆蓋意義不大,學習了多態機制之后就明白了);

以上的注意事項還需要大家記憶,多下點功夫吧。接下來我們再來看一段代碼,對方法覆蓋加深一下印象,業務需求是這樣的:定義一個動物類,所有動物都有移動的行為,其中貓類型的對象在移動的時候輸出“貓在走貓步!”,鳥兒類型的對象在移動的時候輸出“鳥兒在飛翔!”,但是貓類型的對象具有一個特殊的行為,抓老鼠,這個行為不是所有動物對象都有的,是貓類型對象特有的:

public class Animal {
	public void move(){
		System.out.println("動物在移動!");
	}
}
public class Cat extends Animal{
	public void move(){
		System.out.println("貓在走貓步!");
	}
	public void catchMouse(){
		System.out.println("貓抓老鼠!");
	}
}
public class Bird extends Animal{
	public void move(){
		System.out.println("鳥兒在飛翔!");
	}
}
public class Test {
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.move();
		cat.catchMouse();
		Bird bird = new Bird();
		bird.move();
	}
}

運行結果如下圖所示:

Java方法覆蓋

圖13-3:方法覆蓋演示

對方法覆蓋總結一下,當父類中繼承過來的方法無法滿足當前子類業務需求的時候,子類有必要將父類中繼承過來的方法進行覆蓋/重寫。方法覆蓋發生在具有繼承關系的父子類之間,方法覆蓋的時候要求相同的返回值類型、相同的方法名、相同的形式參數列表。方法覆蓋之后子類對象在調用的時候一定會執行覆蓋之后的方法。

全部教程
主站蜘蛛池模板: 欧美日韩高清在线观看 | 国产精品一级毛片不收费 | 2019偷偷狠狠的日日 | 97人人在线观看 | 日韩欧国产精品一区综合无码 | 欧美 国产 日本 | 男女一级毛片免费播放 | 久久er99 | 免费性视频| 中文字幕亚洲视频 | 日韩一区二区超清视频 | 亚洲国内自拍愉拍20页 | 国产精品日韩欧美一区二区三区 | 六月成人网 | 一级a毛片免费观看久久精品 | 日本在线观看不卡免费视频 | 成人综合久久精品色婷婷 | 亚洲综合激情另类图片专区 | 99久久免费精品国产免费高清 | 亚洲欧美日韩综合 | 亚洲国产成人久久笫一页 | 最新中文字幕在线观看 | 亚色在线播放 | 国产成人精品视频一区 | 国产一区二区三区亚洲综合 | 中文字幕视频一区 | 成人私人影院在线版 | 99福利在线 | 91网红福利精品区一区二 | 97在线国产视频 | 久久亚洲精品国产亚洲老地址 | 99久久精品国产免看国产一区 | 国产精品视频播放 | 日韩字幕一中文在线综合 | 中文字幕视频二区 | 欧美久久久久 | 欧美日日| 最新777奇米影视四色 | 国产真实一区二区三区 | 在线视频 中文字幕 | 在线日韩亚洲 |