這篇“Java多態(tài)的概念和特點(diǎn)是什么”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java多態(tài)的概念和特點(diǎn)是什么”文章吧。

創(chuàng)新互聯(lián)于2013年成立,先為濮陽等服務(wù)建站,濮陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為濮陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
繼承關(guān)系使一個子類能繼承父類的特征,并且附加一些新特征。子類是它的父類的特殊化,每個子類的實例都是其父類的實例,但是反過來不成立。例如:每個圓都是一個幾何對象,但并非每個幾何對象都是圓。因此,總可以將子類的實例傳給需要父類型的參數(shù)。參考案例如下:
public class PolymorphismDemo{
/** Main method */
public static void main(String[] args){
displayObject(new Circle(1,"red",false));
displayObject(new Rectangle(1,1,"black",true));
}
public static void displayObject(GeometriicObject object){
System.out.println("Created on "+ object.getDateCreated()+".Color is"+object.getColor());
}
}Created on Mon Mar 09 19:25:20 EDT 2011.Color is red
Created on Mon Mar 09 19:25:20 EDT 2011.Color is black
方法displayObject具有GeometriicObject類型的參數(shù)。可以通過傳遞任何一個GeometriicObject的實例來調(diào)用displayObject。使用父類對象的地方都可以使用子類的對象。這就是通常說的多態(tài)。簡單來說,多態(tài)意味著父類型的變量可以引用子類型的對象。
多態(tài)的前提:繼承(即必須有子父類關(guān)系。)在使用多態(tài)后的父類引用變量調(diào)用方法時,會 調(diào)用子類重寫后的方法。 定義格式:父類類型 變量名=new 子類類型(); 父類引用指向子類對象,如:Animal a = new Cat(); 多態(tài)中,編譯看左邊,運(yùn)行看右邊
instanceof是Java的關(guān)鍵字。Java關(guān)鍵字中的每個字母都是小寫的。
為了更好地理解類型轉(zhuǎn)換,可以認(rèn)為它們類似于動物、北極熊、熊貓之間的關(guān)系,其中動物類Animal是北極熊類Polar bear和熊貓類Panda類的父類。北極熊是動物,所以,總是可以將 Polar bear的實例安全地賦值給Animal變量。該關(guān)鍵字用法是判斷某個對象是否屬于某種數(shù)據(jù)類型,返回值為布爾類型。
Fu Zz=new Xu();
Fu Zzz=new yiting();
if(f1 instanceof Xu){
System.out.println("Zz是Xu的類型");
}
else{
System.out.println("Zzz是yiting的類型");
}總是可以將一個子類的實例轉(zhuǎn)換為一個父類的變量,稱為向上轉(zhuǎn)換,因為子類的實例總是它的父類的實例。
作用:
減少一些重復(fù)的代碼對象實例化的時候可以根據(jù)不同需求實例化不同的對象
package project2;
class Animal{
int num=100;
void say(){
System.out.println("It's an Animal.");
}
}
class Cat extends Animal{
int num=50;
void say(){
System.out.println("It's a Cat.");
}
void bark(){
System.out.println("喵喵喵!");
}
}
public class project2{
public static void main(String[] args) {
Animal cat=new Cat();//向上轉(zhuǎn)型
System.out.println(cat.num);
cat.say();
// cat.bark();
}
}運(yùn)行結(jié)果:
100
It's a Cat.
向上轉(zhuǎn)型不要強(qiáng)制轉(zhuǎn)型,父類引用指向的或者調(diào)用的方法是子類的方法,這個叫動態(tài)綁定。向上轉(zhuǎn)型后父類引用不能調(diào)用子類自己的方法。
把一個父類的實例轉(zhuǎn)換為它的子類變量。必須使用轉(zhuǎn)換標(biāo)記(子類名)進(jìn)行顯示轉(zhuǎn)換,向編譯器表明你的意圖。為使轉(zhuǎn)換成功,必須確保要轉(zhuǎn)換的對象是子類的一個實例。
作用:
向上轉(zhuǎn)型時 ,會遺失子類對象獨(dú)有的其他方法;可以通過向下轉(zhuǎn)型再重新轉(zhuǎn)回。
package project2;
class Animal{
int num=100;
void say(){
System.out.println("It's an Animal.");
}
}
class Cat extends Animal{
int num=50;
void say(){
System.out.println("It's a Cat.");
}
void bark(){
System.out.println("喵喵喵!");
}
}
public class project2{
public static void main(String[] args) {
Animal cat=new Cat();//向上轉(zhuǎn)型
Cat cat2=(Cat) cat;//向下轉(zhuǎn)型
System.out.println(cat2.num);
cat2.say();
cat2.bark();
}
}運(yùn)行結(jié)果:
50
It's a Cat.
喵喵喵!
提示:要重寫一個方法,需要在子類中使用和父類一樣的簽名來對該方法進(jìn)行定義。
子類從父類中繼承方法。有時,子類需要修改父類中定義的方法的實現(xiàn),這稱為方法重寫。
以下幾點(diǎn)值得注意:
重寫的方法必須與被重寫的方法具有一樣的簽名,以及一樣或者兼容的返回類型。兼容的含義是重寫方法的返回類型可以是被重寫方法的返回類型的子類型。僅當(dāng)實例方法可訪問時,它才能被重寫。如果子類中定義的方法在父類中是私有的,那么這兩個方法完全沒有關(guān)系。與實例方法一樣,靜態(tài)方法也能被繼承。但是,靜態(tài)方法不能被重寫。如果父類定義的靜態(tài)方法在子類中被重新定義,那么在父類中定義的靜態(tài)方法將被隱藏。可以使用語法“父類名.靜態(tài)方法名”調(diào)用隱藏的靜態(tài)方法。防止繼承和重寫
一個被final修飾的類和方法都不能被繼承。被final修飾的數(shù)據(jù)域是一個常數(shù)。
有時候,可能希望防止類被繼承。在這種情況下,使用final修飾符表明一個類是最終類,是不能作為父類的。Math類就是一個最終類。String、StringBuilder和StringBuffer類以及所有基本數(shù)據(jù)類型的包裝類也都是最終類。例如,如下類A 就是最終類,不能被繼承:
public final class A{
//Data fields,constructors, and methods omitted
}也可以定義一個方法為最終,最終方法不能被它的子類重寫。例如如下,不能被重寫:
public class Test {
//Data fields,constructors, and methods omitted
public final void m() {
// Do something
}
}注:修飾符public、protected、private、static、abstract以及final可以用在類和類的成員上,只有final修飾符還可以用在方法中的局部變量上。方法內(nèi)的final局部變量就是常量。
以上就是關(guān)于“Java多態(tài)的概念和特點(diǎn)是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:Java多態(tài)的概念和特點(diǎn)是什么
本文路徑:http://chinadenli.net/article36/jpcepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、商城網(wǎng)站、Google、移動網(wǎng)站建設(shè)、面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)