本文目錄一覽:
- 1、在java中,什麼是對象類型的轉換,
- 2、關於java上轉型對象
- 3、自學JAVA,關於對象轉型
- 4、Java中對象的上轉型對象的定義
- 5、java中向上轉型和向下轉型什麼意思?是用來幹什麼的?請高手解釋下,通俗點,謝謝!
- 6、怎麼理解Java的轉型對象
在java中,什麼是對象類型的轉換,
一般就是繼承關係的父類和子類,進行對象類型的轉換,我們知道子類繼承父類,說明子類有了父類的大多數方法,同時子類也可以有自己的方法,如果我們些
A
a
=
new
B();其中B是A的子類,那麼這樣寫沒有錯。反過來寫就有錯,因為父類沒有子類的一部分方法(可以這麼理解)。至於有什麼用,這個問題很深奧啊,這個和編程思想有關係,這種寫法比較好。一般用父類new子類,可以理解為比如一個鳥的類型,下面有許多子類,我們不用關心new的是什麼鳥,因為他們都有相同的父類方法只是實現的時候不一樣。可以看看java編程思想,多理解一下,具體我也說不清楚
關於java上轉型對象
classHuman{
publicvoiddrink(){System.out.println(“Human”);}
}
classYongManextendsHuman{
publicvoiddrink(){System.out.println(“YongMan”);}}
}
publicclassTest{
publicstaticvoidmain(Stringarge[]){
Humane2=newYongMan();
e2.drink();
}
}
以上面這個程序為例子
Humane2=newYongMan();
這句其實是指父類對象e2是子類YongMan對象的上轉型對象
上轉型對象不能操作子類新增的成員變量(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。
上轉型對象可以操作子類繼承或者隱藏的成員變量,也可以使用子類繼承的或者重寫的方法。上轉型對象操作子類繼承或重寫的方法,其作用等價於子類對象去調用這些方法。因此,如果子類重寫了父類的某個方法,則當對象的上轉型對象調用這個方法時一定是調用了這個重寫的方法
上面的YongMan類中的drink()方法重寫了父類的方法
所以最後的輸出結果是YongMan
自學JAVA,關於對象轉型
先不談對象,拿基本數據類型來說,int a; 這樣就聲明了一個int類型的變量,但這個變量還沒有值,a = 1; 這就是幫a賦值為1. 而對象也是如此Person p; 是聲明了一個Person類型的變量,名字叫p,也就是開闢了一塊內存叫p,然後p = new Person(); 就是實例化一個Person對象,在內存中開闢一塊空間存放Person對象,讓p來指向這塊內存,就用通過p來調用這個對象了。
對象用不同的類聲明或實例化,Person p;是在內存中聲明一個Person類型變量,它只能指向Person類型的實例,不然就會報錯,Dod d;是在內存中聲明一個Dog類型變量,它只能指向Dog類型的實例,new Person();就是在內存中開闢一塊空間存放一個Person實例,p = new Person();就是在內存中開闢一塊空間存放一個Person實例讓p類指向它,所以你不能用Dog d = new Person();類型不對,只能Dog d = new Dog(); 什麼類型的引用才能執行什麼類型的指針,如果Dog繼承了Animal,像Animal a = new Dog();也是可以的 因為Dog就是一種Animal。什麼類型的引用只能調用對應類型的屬性和方法。p只能調用Person裡面的屬性和方法,d只能調用Dog裡面的屬性和方法,a只能調用Animal裡面的屬性和方法,雖然是new的Dog對象,但是你是把它當做Animal看的。Animal a = new Dog();這種寫法很常見,多態機制你可能還沒學 後面你就明白了
Java中對象的上轉型對象的定義
class Human{
public void drink(){System.out.println(“Human”);}
}
class YongMan extends Human{
public void drink(){System.out.println(“YongMan”);}}
}
public class Test{
public static void main(String arge[]){
Human e2=new YongMan();
e2.drink();
}
}
以上面這個程序為例子
Human e2=new YongMan();
這句其實是指父類對象e2是子類YongMan對象的上轉型對象
上轉型對象不能操作子類新增的成員變量(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。
上轉型對象可以操作子類繼承或者隱藏的成員變量,也可以使用子類繼承的或者重寫的方法。上轉型對象操作子類繼承或重寫的方法,其作用等價於子類對象去調用這些方法。因此,如果子類重寫了父類的某個方法,則當對象的上轉型對象調用這個方法時一定是調用了這個重寫的方法
上面的YongMan 類中的drink()方法 重寫了父類的方法
所以最後的輸出結果是YongMan
java中向上轉型和向下轉型什麼意思?是用來幹什麼的?請高手解釋下,通俗點,謝謝!
我們在現實中常常這樣說:這個人會唱歌。在這裡,我們並不關心這個人是黑人還是白人,是成人還是小孩,也就是說我們更傾向於使用抽象概念“人”。再例如,麻雀是鳥類的一種(鳥類的子類),而鳥類則是動物中的一種(動物的子類)。我們現實中也經常這樣說:麻雀是鳥。這兩種說法實際上就是所謂的向上轉型,通俗地說就是子類轉型成父類。這也符合Java提倡的面向抽象編程思想。
子類轉型成父類是向上轉型,反過來說,父類轉型成子類就是向下轉型。但是,向下轉型可能會帶來一些問題:我們可以說麻雀是鳥,但不能說鳥就是麻雀。
怎麼理解Java的轉型對象
我來提供一個比較靠譜的詳細的解釋,假設,A類是B類的父類,當我們用子類創建一個對象,並把這個對象的引用放到父類的對象中時,比如A a;
A=new B();
或
A a;
B b=new B();
a=b;
稱這個父類對象 a,是子類對象b的上轉型對象。好比說“老虎是哺乳動物”。對象的上轉型對象的實體是子類負責創建的,但上轉型對象會失去原對象的一些屬性和功能。上轉型對象具有如下特點:
1 上轉型對象不能操作子類新增的成員變量(失掉了這部分屬性),不能使用子類新增的方法(失掉了一些功能)。
2 上轉型對象可以操作子類繼承或重寫的成員變量,也可以使用子類繼承的或重寫的方法。
3 如果子類重寫了父類的某個方法後,當對象的上轉型對象調用這個方法時一定是調用了這個重寫的方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151091.html