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

歡迎訪問 生活随笔!

生活随笔

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

java

java中对象类型转换_Java中的对象的类型转换介绍(附代码)

發布時間:2025/3/15 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中对象类型转换_Java中的对象的类型转换介绍(附代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇文章給大家帶來的內容是關于Java中的對象的類型轉換介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

向上轉型:子類對象轉為父類,父類可以是接口。公式:Father f = new Son();Father是父類或接口,son是子類。

向下轉型:父類對象轉為子類。公式:Son s = (Son)f;

我們將形參設為父類Animal類型,當執行test.f(c)時,內存情況如下圖:

c作為Cat類型傳入,Animal a作為形參,相當于執行了Animal a = new Cat(),這時a和c同時指向Cat對象,但此時a不能訪問Cat類擴展的數據成員,所以再將a強轉成Cat類型即可。如果不存在這樣的轉型機制,則針對貓和狗我們還要分別寫兩個函數f(Cat c)和f(Dog d)。但其實上圖程序的可擴展性也不是最好的。我們還可以利用動態綁定(即多態)將擴展性進一步提升。多態機制的三個前提分別是:(1)要有繼承,(2)要重寫,即子類對父類中某些方法進行重新定義,(3)要向上轉型,用父類引用指向子類對象。下面來看一個例子:

class Animal {

private String name;

/**

* 在Animal類自定義的構造方法

* @param name

*/

Animal(String name) {

this.name = name;

}

/**

* 在Animal類里面自定義一個方法enjoy

*/

public void enjoy() {

System.out.println("動物的叫聲……");

}

}

class Cat extends Animal {

private String eyesColor;

/**

* 在子類Cat里面定義Cat類的構造方法

* @param n

* @param c

*/

Cat(String n, String c) {

/**

* 在構造方法的實現里面首先使用super調用父類Animal的構造方法Animal(String name)。

* 把子類對象里面的父類對象先造出來。

*/

super(n);

eyesColor = c;

}

/**

* 子類Cat對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。

*/

public void enjoy() {

System.out.println("我養的貓高興地叫了一聲……");

}

}

/**

* 子類Dog從父類Animal繼承下來,Dog類擁有了Animal類所有的屬性和方法。

* @author gacl

*

*/

class Dog extends Animal {

/**

* 在子類Dog里面定義自己的私有成員變量

*/

private String furColor;

/**

* 在子類Dog里面定義Dog類的構造方法

* @param n

* @param c

*/

Dog(String n, String c) {

/**

* 在構造方法的實現里面首先使用super調用父類Animal的構造方法Animal(String name)。

* 把子類對象里面的父類對象先造出來。

*/

super(n);

furColor = c;

}

/**

* 子類Dog對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。

*/

public void enjoy() {

System.out.println("我養的狗高興地叫了一聲……");

}

}

/**

* 子類Bird從父類Animal繼承下來,Bird類擁有Animal類所有的屬性和方法

* @author gacl

*

*/

class Bird extends Animal {

/**

* 在子類Bird里面定義Bird類的構造方法

*/

Bird() {

/**

* 在構造方法的實現里面首先使用super調用父類Animal的構造方法Animal(String name)。

* 把子類對象里面的父類對象先造出來。

*/

super("bird");

}

/**

* 子類Bird對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。

*/

public void enjoy() {

System.out.println("我養的鳥高興地叫了一聲……");

}

}

/**

* 定義一個類Lady(女士)

* @author gacl

*

*/

class Lady {

/**

* 定義Lady類的私有成員變量name和pet

*/

private String name;

private Animal pet;

/**

* 在Lady類里面定義自己的構造方法Lady(),

* 這個構造方法有兩個參數,分別為String類型的name和Animal類型的pet,

* 這里的第二個參數設置成Animal類型可以給我們的程序帶來最大的靈活性,

* 因為作為養寵物來說,可以養貓,養狗,養鳥,只要是你喜歡的都可以養,

* 因此把它設置為父類對象的引用最為靈活。

* 因為這個Animal類型的參數是父類對象的引用類型,因此當我們傳參數的時候,

* 可以把這個父類的子類對象傳過去,即傳Dog、Cat和Bird等都可以。

* @param name

* @param pet

*/

Lady(String name, Animal pet) {

this.name = name;

this.pet = pet;

}

/**

* 在Lady類里面自定義一個方法myPetEnjoy()

* 方法體內是讓Lady對象養的寵物自己調用自己的enjoy()方法發出自己的叫聲。

*/

public void myPetEnjoy() {

pet.enjoy();

}

}

public class Jerque {

public static void main(String args[]) {

/**

* 在堆內存里面new了一只藍貓對象出來,這個藍貓對象里面包含有一個父類對象Animal。

*/

Cat c = new Cat("Catname", "blue");

/**

* 在堆內存里面new了一只黑狗對象出來,這個黑狗對象里面包含有一個父類對象Animal。

*/

Dog d = new Dog("Dogname", "black");

/**

* 在堆內存里面new了一只小鳥對象出來,這個小鳥對象里面包含有一個父類對象Animal。

*/

Bird b = new Bird();

/**

* 在堆內存里面new出來3個小姑娘,名字分別是l1,l2,l3。

* l1養了一只寵物是c(Cat),l2養了一只寵物是d(Dog),l3養了一只寵物是b(Bird)。

* 注意:調用Lady類的構造方法時,傳遞過來的c,d,b是當成Animal來傳遞的,

* 因此使用c,d,b這三個引用對象只能訪問父類Animal里面的enjoy()方法。

*/

Lady l1 = new Lady("l1", c);

Lady l2 = new Lady("l2", d);

Lady l3 = new Lady("l3", b);

/**

* 這三個小姑娘都調用myPetEnjoy()方法使自己養的寵物高興地叫起來。

*/

l1.myPetEnjoy();

l2.myPetEnjoy();

l3.myPetEnjoy();

}

}

上面的例子中,我們發現,如果我們想要加入新的動物,只需定義相應的類繼承Animal,完全不用動任何一處代碼,因為這里運用了面向對象最核心的東西——多態。與之前的例子不同,雖然我們一直強調當用父類的引用指向子類對象,父類無法訪問子類自己的成員,但是方法與數據成員不同,具體調哪一個方法是等到運行時決定的,new出了什么對象就調用相應對象的方法,取決于實際new出的對象而不是指向對象的引用,所以當傳入不同動物類型,mypetEnjoy()就會去執行不同的方法。

總結

以上是生活随笔為你收集整理的java中对象类型转换_Java中的对象的类型转换介绍(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。