日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java多态和继承_Java学习--继承与多态

發(fā)布時間:2023/12/19 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多态和继承_Java学习--继承与多态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.何時使用繼承

1.1符合 *** is a ***的規(guī)則,即雙方可以相互依存,亦可保持獨立;

1.2可實現(xiàn)代碼復用

即當大家的代碼塊具有相似或類似時,我們可以抽象出一些公共的屬性及方法作為父類,子類可以 繼承父類而使用這些代碼片段。同時也能保持自己的獨立性。

2.抽象

2.1定義:

在一段段的繼承關系中,可以清晰地形成一座金字塔格式,底部的子類將會越來越強大,因為其繼承了上部的多種屬性及方法,而越在上部的類就越簡單也即越抽象。甚至可追溯到這個父類中的方法無法滿足子類,形成了一種抽象方法,含有這種抽象方法的類即為抽象類。

語法如下:

public abstract class 類名 {

}

2.2抽象的特性

抽象類由于過于抽象,將無法實現(xiàn)方法,也即實現(xiàn)也無意義,固抽象類不能實例化。

public abstract class Animal{

private String name;

public void setName(String name){

this.name = name;

}

public String getName(){

return this.name;

}

public Animal(){

}

public Animal(String name){

this.name = name;

}

public void sleep(){

}

}

如果一個方法過于抽象,不能實現(xiàn),其一定要寫在抽象類中,不加方法體,固:

抽象方法一定位于抽象類中;

抽象方法沒有方法體;

不過,抽象類中的方法不一定都是抽象方法。

注意:

如果子類繼承了抽象類,需對抽象方法做出修改,否則,此子類也必須是抽象子類。

3.final關鍵字

——final是java語言中的一個關鍵字,被譯為最終的不可改變的

——final修飾的類無法被繼承

——final修飾的方法無法被重寫

——final修飾的變量一旦被賦值,將不可再次賦值

——final修飾的引用一旦指向某個對象之后,就不能再指向其他對象,所以被final修飾后的引用指向的對象將不會被垃圾回收機制回收。但該對象中的內(nèi)存可以被修改,因為其修飾的引用是一個地址,地址不能被改變,但其對象中的內(nèi)容可以改變。

——final修飾的實例變量常常與static一起使用,被稱為常量,與static一起使用將有效提高運行效率。

public final class Animal{

}

public class Person extends Animal{

public void sleep(){

System.out.println("閉眼躺著睡覺...");

}

}

3.1思考

靜態(tài)方法能被繼承嗎?

靜態(tài)方法能被重寫嗎?

靜態(tài)方法可以被繼承,應該說是被默認繼承了靜態(tài)方法,但不能重寫,應該說該靜態(tài)方法被隱藏了。

分析:

1. 靜態(tài)方法和屬性是屬于類的,調(diào)用的時候直接通過類名.方法名完成,不需要繼承機制及可以調(diào)用。如果子類里面定義了靜態(tài)方法和屬性,那么這時候父類的靜態(tài)方法或?qū)傩苑Q之為"隱藏"。如果你想要調(diào)用父類的靜態(tài)方法和屬性,直接通過父類名.方法或變量名完成,至于是否繼承一說,子類是有繼承靜態(tài)方法和屬性,但是跟實例方法和屬性不太一樣,存在"隱藏"的這種情況。

2. 多態(tài)之所以能夠?qū)崿F(xiàn)依賴于繼承、接口和重寫、重載(繼承和重寫最為關鍵)。有了繼承和重寫就可以實現(xiàn)父類的引用指向不同子類的對象。重寫的功能是:"重寫"后子類的優(yōu)先級要高于父類的優(yōu)先級,但是“隱藏”是沒有這個優(yōu)先級之分的。

3. 靜態(tài)屬性、靜態(tài)方法和非靜態(tài)的屬性都可以被繼承和隱藏而不能被重寫,因此不能實現(xiàn)多態(tài),不能實現(xiàn)父類的引用可以指向不同子類的對象。非靜態(tài)方法可以被繼承和重寫,因此可以實現(xiàn)多態(tài)。

4.多態(tài)

4.1定義:

多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作。對拓展開放,對修改關閉。

4.2使用多態(tài)的好處:

1.消除類型之間的耦合關系

2. 可替換性

3. 可擴充性

4. 接口性

5. 靈活性

6. 簡化性

4.3實現(xiàn)步驟:

[1] 編寫父類

[2] 編寫子類,子類一定要重寫/實現(xiàn)父類的方法

[3] 運行時,父類類型 引用 子類對象 (Pet pet = new Dog())

當使用多態(tài)方式調(diào)用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調(diào)用子類的同名方法??梢允钩绦蛴辛己玫臄U展,并可以對所有類的對象進行通用處理。

4.4多態(tài)的實現(xiàn)形式

1.父類類型 引用 子類對象(基于此而延伸)

實例:

// 多態(tài)// 同一引用類型Pet pet = null;

// 父類引用 引用 子類對象pet = new Dog("二狗",100,0,"土狗");

// 呈現(xiàn)多態(tài)pet.eat();

這里的.eat()的方法,是屬于Dog子類中獨有的方法,父類將子類的方法引用了過來,完成多態(tài),實現(xiàn)拓展性。

2.父類作為方法的形參實現(xiàn)多態(tài)

實例:

public void feed(Pet pet) {

System.out.println(this.getName() + "正在喂" + pet.getName());

pet.eat();

}

Pet作為寵物類的父類,在主人類中被當作了方法的形參,實現(xiàn)了多態(tài)。

3.父類作為方法的返回值實現(xiàn)多態(tài)

實例:

public Pet adoptPet(int type) {

Pet pet = null;

if(1 == type) {

pet = new Dog();

}else if(2 == type) {

pet = new Penguin();

}else if(3 == type){

pet = new Cat();

}

return pet;

}

4.5存在于多態(tài)中的類型轉(zhuǎn)換

在多態(tài)實現(xiàn)的過程中一樣存在這兩種類型轉(zhuǎn)換,即自動類型轉(zhuǎn)換(亦稱為向上類型轉(zhuǎn)換)與強制類型轉(zhuǎn)換(向下類型轉(zhuǎn)換)。

自動類型轉(zhuǎn)換:子類可以自動轉(zhuǎn)換為父類。

Pet pet = null;

pet = new Dog();

同樣,若想要進行強制類型轉(zhuǎn)換,需要加強制類型轉(zhuǎn)換符。

子類類型 引用 = (子類)父類對象

需要注意的是,如果單純這樣轉(zhuǎn)換,編譯不會報錯,但在運行過程中將很容易發(fā)生運行錯誤,許多程序員在編碼的過程中,很容易將子類類型轉(zhuǎn)換為錯誤的父類類型,導致父類在調(diào)用子類特有的方法時發(fā)生找不到方法的可能。所以java為了應對這些問題,創(chuàng)建了 instantceof關鍵字。

通過instantceof關鍵字可以判斷其轉(zhuǎn)換的類型是否是我們需要的類型,可參考以下格式:

public class TestInstanceOf {

public static void main(String[] args) {

Dog dog = new Dog();

System.out.println(dog instanceof Dog); //trueSystem.out.println(dog instanceof Pet); //trueSystem.out.println(dog instanceof Object); //true}

}

public void play(Pet pet) {

if(pet instanceof Dog) {

Dog dog = (Dog) pet;

dog.catchFlyDisc();

}else if(pet instanceof Penguin) {

Penguin penguin = (Penguin) pet;

penguin.swimming();

}

}

總結(jié)

以上是生活随笔為你收集整理的java多态和继承_Java学习--继承与多态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。