新聞中心
JAVA代碼編寫,多態(tài)
第一步:創(chuàng)建一個父類,如Animal(動物) 類,這個方法中只有方法的定義,沒有實現(xiàn)。第二步:創(chuàng)建一個子類,如cat(貓)類,這個方法中實現(xiàn)父類中的所有方法,并進行重寫。
我們提供的服務有:網(wǎng)站制作、網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、正定ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的正定網(wǎng)站制作公司
第三步:創(chuàng)建一個子類,如dog(狗)類,這個方法中實現(xiàn)父類中的所有方法,并進行重寫。
備注:多態(tài)實際上是一個父類有特定的屬性,如動物有名稱、年齡、所屬科目,之后由子類去實現(xiàn)具體的,如貓,名稱是貓,年齡是5歲,所屬科目為貓科,然后狗同樣有這些屬性,只不過是值不同,這個就是一個多態(tài)的形式。子類可以有無限多,在步驟三后面添加即可。
關于Java多態(tài)的實例分析
1--:a1是類A的實例,所以只能調用A類中的show方法,參數(shù)b是類B的實例,B又是A的子類,所以只能調用類A中參數(shù)是A obj的那個方法,因為b只能轉換為父類型A,不能轉換為子類型D
2--:道理同上。
3--:道理同上。
由于前三條的變量類型和對象類型相同,不涉及多態(tài),僅僅是重載的問題。
4--:此條代碼是難點,這里涉及到了重寫和重載的概念,把重寫和重載徹底理解了,你就知道為什么輸出是B and A了。重寫是子類中的方法和父類中的方法同名,同返回類型,同類型參數(shù)。
而重載是同一個類中的兩個方法(注意是同一個類中),名相同,但是參數(shù)類型不同或者數(shù)量不同。因為a2引用的是B類的實例,所以要去B類中找重寫的show方法,而不是重載的。所以只能調用參數(shù)類型是A的那個方法。
5--:道理同第4條。
6--:B類中繼承了A類的參數(shù)為D類型的show方法,只繼承而沒有重寫。也就是B類中實際有三個方法,所以此條代碼調用的是參數(shù)為D的方法。
7--:把上面的都理解了。7,8,9條代碼就很容易理解了。
7,8,9和1,2,3一樣不存在多態(tài),僅僅是重載方法的調用。多態(tài)是父類變量引用子類對象才會發(fā)生的。變量類型和對象類型相同,只會涉及重載,和重寫無關。
你發(fā)的這段代碼,我在網(wǎng)上找到了一個博文,看了他的解釋,開始我覺得很難理解,后來才明白,他的解釋是混亂的。正確的原理是重寫和重載。只要你把重寫和重載的區(qū)別理解透徹,這段代碼就容易理解了。
用Java繼承和多態(tài)實現(xiàn)編寫代碼
代碼如下:
abstract?class?DongWu?{
public?abstract?void?info();
}
class?Bird?extends?DongWu?{
@Override
public?void?info()?{
System.out.println("我是一只鳥。");
}
}
class?Fish?extends?DongWu?{
@Override
public?void?info()?{
System.out.println("我是一條魚。");
}
}
public?class?App5?{
public?static?void?main(String[]?args)?{
DongWu?bird?=?new?Bird();
bird.info();
DongWu?fish?=?new?Fish();
fish.info();
}
}
JAVA中多態(tài)是怎么一回事,能不能舉個例子,嗷嗷感謝!
java多態(tài)其實很簡單的....java多態(tài)必須滿足三個條件:1、繼承2、子類重寫父類方法3、父類引用調用子類對象接下來用例子一步一步解釋分別是什么意思......繼承:公司員工 有測試員、開發(fā)員和項目經(jīng)理 他們都有一些共同的屬性比如 年齡、性別、家庭地址、工資等。這時就可以將她們抽象出一個類出來 person 包括這些共同的屬性。然后測試員、開發(fā)員和項目經(jīng)理去繼承這個類person后,就擁有了這些屬性了。子類重寫父類方法:測試員、開發(fā)員和項目經(jīng)理的工資是不一樣的,他們又從繼承了工資這個屬性,顯然不能達到要求。此時就必須重寫從父類繼承過來的這個方法。父類引用調用子類對象:Person person = new Manager() 代碼:pulbic Person {
public void 工資() { System.out.println(3000);
}}
//=========================================
public Manager extends Person { //滿足條件1 繼承 public void 工資() { //滿足條件2 子類重寫父類方法 System.out.println(5000);
}
}//=========================================public Demo { public static void main(String[] args) {
Person person = new Manager(); //滿足條件3 父類引用調用子類對象
person.工資(); //打印 出5000;
}
}
Java程序如何實現(xiàn)多態(tài)
多態(tài),就是重載和重寫.重載發(fā)生在一個類中.重寫發(fā)生在子類,意思就是子類重寫父類相同名稱的方法.剛學語言有的東西,不必搞得那么清楚,只有知道怎么用就行了,有的問題你要想真正把它搞得很懂,短時間是不可能的,比如說接口,沒有幾年工作經(jīng)驗你根本不可能真正理解什么是接口,甚至有的人工作四,五年也沒搞明白什么是接口,不要花太多時間去搞這些不容易搞懂的問題.
重載的特性,方法名相同.返回類型,傳入方法的參數(shù)不同(包括個數(shù)和類型).
重寫的特性,方法名相同,返回類型,參數(shù)均相同,必須發(fā)生在子類.
1.Java語言允許某個類型的引用變量引用子類的實例,而且可以對這個引用變量進行類型轉換。
Animal animal=new Dog(); //引用變量animal引用一個Animal子類Dog的實例
Dog dog=(Dog)animal; //向下轉型,把Animal類型轉換為Dog類型
Creature creature=animal; //向上轉型,把Animal類型轉換為 Creature類型
animal=new Cat(); //引用變量animal引用另一個Animal子類Cat的實例
注:Creature這里指的是生物。
2.如果把引用變量轉換為子類類型,稱為向下轉型,如果把引用變量轉換為父類類型,稱為向上轉型。
3.在進行引用變量的類型轉換時,會受到各種限制。而且在通過引用變量訪問它所引用的實例的靜態(tài)屬性、靜態(tài)方法、實例屬性、實例方法,以及從父類中繼承的方法和屬性時,Java虛擬機會采用不同的綁定機制。
4.成員變量、靜態(tài)方法按照引用變量聲明的類型靜態(tài)綁定;實例方法按照引用變量引用的實例動態(tài)綁定。
例如,對于以下這段代碼:
Fathers f=new Sons();
System.out.println(“f.var=”+f.var);
System.out.println(“f.staticVar=”+f.staticVar);
f.method();
f.staticMethod();
運行時將會輸出如下結果:
f.var=FatherVar
f.staticVar=StaticFaterVar
Son method
Static Father method
class Fathers{
String var="FatherVar";
static String staticVar="StaticFatherVar";
void method(){System.out.println("Father method");}
static void staticMethod(){System.out.println("Static Father method");}
}
class Sons extends Fathers{
String var="SonVar";
static String staticVar="StaticSonVar";
void method(){System.out.println("Son method");}
static void staticMethod(){System.out.println("Static Son method");}
String sonVar=null;
void sonMethod(){}
}
JAVA多態(tài)經(jīng)典例題
System.out.println("1--" + a1.show(b));
a1是A類引用指向A類對象,不存在多態(tài),一定調用A類方法。A類方法有兩個show(D)和show(A),b是B類引用無法轉換為D類引用,但可以轉換為A類引用,因此調用show(A),輸出A and A。
System.out.println("2--" + a1.show(c));
輸出A and A,原因同上。
System.out.println("3--" + a1.show(d));
調用show(D),輸出A and D。
System.out.println("4--" + a2.show(b));
a2是A類引用指向B類對象,可能存在多態(tài)。b是B類引用無法轉換為D類引用,但可以轉換為A類引用,因此調用show(A),而B類重寫了show(A),因此調用的是重寫后的show(A),輸出B and A。
System.out.println("5--" + a2.show(c));
同上,C類引用無法轉換為D類引用,但可以轉換為A類引用,因此調用show(A),輸出B and A。
System.out.println("6--" + a2.show(d));
調用show(D),show(D)又調用父類即A類的show(D),輸出A and D
System.out.println("7--" + b.show(b));
b是B類引用指向B類對象,不存在多態(tài),一定調用B類方法。B類一共有三個方法:重寫自A類的show(A)和show(D),以及新定義的show(B)。show(b)調用show(B)方法,輸出B and B
System.out.println("8--" + b.show(c));
C類繼承自B類,也調用show(B)方法,輸出B and B
System.out.println("9--" + b.show(d));
調用show(D),show(D)又調用父類即A類的show(D),輸出A and D
文章標題:java中多態(tài)代碼例子 舉例說明JAVA中實現(xiàn)多態(tài)的方法
文章位置:http://fisionsoft.com.cn/article/doogopd.html