您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java中多態和抽象類的實現方式”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中多態和抽象類的實現方式”吧!
多態
1.要實現多態,那么必須存在父子關系(繼承關系或者實現接口)
2.實現多態的方式:將父類對象的聲明指向子類對象,例如Pet pet = new Dog();
例如:
/*
這是一個類名為Pet的父類
*/
public class Pet {
public void print() {
System.out.println("----調用Pet父類的print方法-----");
}
}
/*
這是類名為Dog的第一個子類
*/
public class Dog extends Pet{
public void print() {
System.out.println("-----調用Dog子類的print方法-----");
}
}
/*
這是類名為Cat的第二個子類
*/
public class Cat extends Pet{
public void print() {
System.out.println("-----調用Cat子類的print方法----");
}
}
/*
這是類名為Test的測試類
*/
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.print();
//這里的輸出結果為:(-----調用Dog子類的print方法-----)
Cat cat = new Cat();
cat.print();
//這里輸出的結果為:(-----調用Cat子類的print方法----)
Pet pet = new Pet();
pet.print();
//這里輸出的結果為:(-----調用Pet父類的print方法----)
//這里使用多態方法,將父類對象的聲明指向子類對象
Pet pet1 = new Dog();
pet1.print();
//這里輸出的結果為:(-----調用Dog子類的print方法-----)
}
}
3.向上轉型:向上轉型就是將子類對象賦值給父類對象的過程
4.實現多態以后,從表面上看調用的是父類的方法,實際調用的是子類覆蓋掉父類的方法
public class Test {
public static void main(String[] args) {
//這就是向上轉型
Pet pet1 = new Dog();
//實現多態以后,從表面上看調用的是父類的方法,實際調用的是子類覆蓋掉父類的方法
pet1.print();
//這里輸出的結果為:(-----調用Dog子類的print方法-----)
}
}
5.向下轉型:向下轉型就是將多態的父類對象強制轉換成子類對象的過程
6.當需要調用子類獨有的方法和屬性的時候,必須向下轉型
public class Cat extends Pet{
public void print() {
System.out.println("-----調用Cat子類的print方法----");
}
//這是一個子類獨有的方法
public void printCat() {
System.out.println("----我是一只貓----");
}
}
public class Test {
public static void main(String[] args) {
//這就是向上轉型
Pet pet2 = new Cat();
//這就是向下轉型
Cat cat2 = (Cat)pet2;
//當需要調用子類獨有的方法和屬性的時候,必須向下轉型
cat2.printCat();
//輸出的結果為:(----我是一只貓----)
cat2.print();
//輸出的結果為:(-----調用Cat子類的print方法----)
}
}
注意:
7.通過instanceof判斷當前的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))
這是當時遇到的一個報錯,需要特別注意。解決方法如下:
錯誤代碼為:
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判斷當前的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 返回值類型 方法名(參數列表)
3.抽象類中可以定義普通方法,也可以定義抽象方法,普通類中不能定義抽象方法
4.抽象類中可以定義構造方法,普通類也可以,當一個普通類繼承了抽象類之后,該普通類必須實現抽象類中的抽象方法鄭州做婦科檢查價格 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();
//這是一個無參的構造函數
public Animal() {
}
//這是一個有參的構造函數
public Animal(String name) {
this.name = name;
}
}
5.抽象類不能直接創建對象,如果要創建對象,則必須是多態的方式創建。
例如
錯誤案例,這樣寫會直接報錯。
/*
這是一個類名為Test的測試類
*/
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
}
}
真確案例:
/*
創建一個類名為Bird
*/
public class Bird extends Animal{
public void method() {
System.out.println("-----我是一只小鳥,我會飛------");
}
}
public class Test {
public static void main(String[] args) {
//利用多態的方式創建抽象類的對象
Animal animal = new Bird();
animal.method();
}
}
6.抽象類中的方法不能用private、final修飾,因為抽象類中的方法是用來被繼承的。
總結
抽象類的目的就是:抽象類的作用類似于“模板”,其目的是方便開發人員根據抽象類的格式來修改和創建新類。抽象類主要用于繼承,有利于程序的擴展。
感謝各位的閱讀,以上就是“Java中多態和抽象類的實現方式”的內容了,經過本文的學習后,相信大家對Java中多態和抽象類的實現方式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。