這篇文章主要講解了“Java中多態(tài)和抽象類的實現(xiàn)方式”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中多態(tài)和抽象類的實現(xiàn)方式”吧!
創(chuàng)新互聯(lián)建站是專業(yè)的南崗網(wǎng)站建設(shè)公司,南崗接單;提供網(wǎng)站設(shè)計制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行南崗網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
多態(tài)
1.要實現(xiàn)多態(tài),那么必須存在父子關(guān)系(繼承關(guān)系或者實現(xiàn)接口)
2.實現(xiàn)多態(tài)的方式:將父類對象的聲明指向子類對象,例如Pet pet = new Dog();
例如:
/*
這是一個類名為Pet的父類
*/
public class Pet {
public void print() {
System.out.println("----調(diào)用Pet父類的print方法-----");
}
}
/*
這是類名為Dog的第一個子類
*/
public class Dog extends Pet{
public void print() {
System.out.println("-----調(diào)用Dog子類的print方法-----");
}
}
/*
這是類名為Cat的第二個子類
*/
public class Cat extends Pet{
public void print() {
System.out.println("-----調(diào)用Cat子類的print方法----");
}
}
/*
這是類名為Test的測試類
*/
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.print();
//這里的輸出結(jié)果為:(-----調(diào)用Dog子類的print方法-----)
Cat cat = new Cat();
cat.print();
//這里輸出的結(jié)果為:(-----調(diào)用Cat子類的print方法----)
Pet pet = new Pet();
pet.print();
//這里輸出的結(jié)果為:(-----調(diào)用Pet父類的print方法----)
//這里使用多態(tài)方法,將父類對象的聲明指向子類對象
Pet pet1 = new Dog();
pet1.print();
//這里輸出的結(jié)果為:(-----調(diào)用Dog子類的print方法-----)
}
}
3.向上轉(zhuǎn)型:向上轉(zhuǎn)型就是將子類對象賦值給父類對象的過程
4.實現(xiàn)多態(tài)以后,從表面上看調(diào)用的是父類的方法,實際調(diào)用的是子類覆蓋掉父類的方法
public class Test {
public static void main(String[] args) {
//這就是向上轉(zhuǎn)型
Pet pet1 = new Dog();
//實現(xiàn)多態(tài)以后,從表面上看調(diào)用的是父類的方法,實際調(diào)用的是子類覆蓋掉父類的方法
pet1.print();
//這里輸出的結(jié)果為:(-----調(diào)用Dog子類的print方法-----)
}
}
5.向下轉(zhuǎn)型:向下轉(zhuǎn)型就是將多態(tài)的父類對象強制轉(zhuǎn)換成子類對象的過程
6.當(dāng)需要調(diào)用子類獨有的方法和屬性的時候,必須向下轉(zhuǎn)型
public class Cat extends Pet{
public void print() {
System.out.println("-----調(diào)用Cat子類的print方法----");
}
//這是一個子類獨有的方法
public void printCat() {
System.out.println("----我是一只貓----");
}
}
public class Test {
public static void main(String[] args) {
//這就是向上轉(zhuǎn)型
Pet pet2 = new Cat();
//這就是向下轉(zhuǎn)型
Cat cat2 = (Cat)pet2;
//當(dāng)需要調(diào)用子類獨有的方法和屬性的時候,必須向下轉(zhuǎn)型
cat2.printCat();
//輸出的結(jié)果為:(----我是一只貓----)
cat2.print();
//輸出的結(jié)果為:(-----調(diào)用Cat子類的print方法----)
}
}
注意:
7.通過instanceof判斷當(dāng)前的pet2對象是否是Dog對象,如果是返回值為true,否則返回值為false
8.報錯信息為:(Exception in thread “main” java.lang.ClassCastException: com.four.Pet cannot be cast to com.four.Cat at com.four.Test.main(Test.java:18))
這是當(dāng)時遇到的一個報錯,需要特別注意。解決方法如下:
錯誤代碼為:
public class Test {
public static void main(String[] args) {
Pet pet2 = new Cat();
Dog dog2 = (Dog)pet2;
dog2.print();
}
}
修改后的正確代碼為:
public class Test {
public static void main(String[] args) {
Pet pet2 = new Cat();
//通過instanceof判斷當(dāng)前的pet2對象是否是Dog對象,如果是返回值為true,否則返回值為false
if(pet2 instanceof Dog) {
Dog dog2 = (Dog)pet2;
dog2.print();
}else if(pet2 instanceof Cat) {
Cat cat2 = (Cat)pet2;
cat2.print();
}
}
}
抽象類
1.抽象類的語法格式:修飾符 abstract class 類名{類體}
2.定義抽象方法的格式:修飾符 abstract 返回值類型 方法名(參數(shù)列表)
3.抽象類中可以定義普通方法,也可以定義抽象方法,普通類中不能定義抽象方法
4.抽象類中可以定義構(gòu)造方法,普通類也可以,當(dāng)一個普通類繼承了抽象類之后,該普通類必須實現(xiàn)抽象類中的抽象方法鄭州做婦科檢查價格 http://www.zzkdfk.com/
/*
這是一個類名為Animal的抽象類
*/
public abstract class Animal {
//這是定義的一個變量
public String name;
//這是一個名為print的普通方法
public void print() {
System.out.println("-----我的print方法-----");
}
//這是一個名為method的抽象方法
public abstract void method();
//這是一個無參的構(gòu)造函數(shù)
public Animal() {
}
//這是一個有參的構(gòu)造函數(shù)
public Animal(String name) {
this.name = name;
}
}
5.抽象類不能直接創(chuàng)建對象,如果要創(chuàng)建對象,則必須是多態(tài)的方式創(chuàng)建。
例如
錯誤案例,這樣寫會直接報錯。
/*
這是一個類名為Test的測試類
*/
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
}
}
真確案例:
/*
創(chuàng)建一個類名為Bird
*/
public class Bird extends Animal{
public void method() {
System.out.println("-----我是一只小鳥,我會飛------");
}
}
public class Test {
public static void main(String[] args) {
//利用多態(tài)的方式創(chuàng)建抽象類的對象
Animal animal = new Bird();
animal.method();
}
}
6.抽象類中的方法不能用private、final修飾,因為抽象類中的方法是用來被繼承的。
總結(jié)
抽象類的目的就是:抽象類的作用類似于“模板”,其目的是方便開發(fā)人員根據(jù)抽象類的格式來修改和創(chuàng)建新類。抽象類主要用于繼承,有利于程序的擴展。
感謝各位的閱讀,以上就是“Java中多態(tài)和抽象類的實現(xiàn)方式”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java中多態(tài)和抽象類的實現(xiàn)方式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!