java向上轉型、向下轉型與instanceof運算子(2021-1-18)
java向上轉型、向下轉型與instanceof運算子
文章目錄
前言
在java面向物件的世界中,主要有三大特點,即封裝,繼承和多型,而多型也是最抽象,最難理解的一個特點。多型(Polymorphism),就是指同一個實體同時具有多種形式,同一操作作用於不同的實體,可以 有不同的解釋,產生不同的執行結果。而java 多型主要實現技術中就牽扯到了向上轉型和向下轉型。
提示:以下是本篇文章正文內容,下面案例可供參考
一、向上轉型。
定義一個父類型別,引用一個子類物件,簡稱父類引用子類物件,又稱向上轉型,目的是為了模糊和淡化子類的型別,從而在具體邏輯處理過程中可以用其父類或所實現的介面來代替具體的子類,從而減少方法的過載量;
(示例)現有抽象類Product(商品類),以及其子類Book類和Phone類:
public abstract class Product {}
public class Book extends Product{}
public class Phone extends Product{}
public classTest01{
public static void main(String[] args) {
// Book子類的引用,指向Book子類的物件
Book product01 = new Book();
// Produc父類的引用,指向Book子類的物件
Product product02 = new Book();
Product product03 = new Phone();
// Book子類的引用,不允許指向Product父類的物件
// 錯誤
// Book product04 = new Product();
// Product父型別的物件陣列
// 該陣列中,可以包含任意一種子類物件(Book或者Phone )
Product[] productArray = new Product[10];
// 放入具體的商品物件
productArray[ 0] = new Book();
productArray[1] = new Book();
productArray[2] = new Book();
productArray[3] = new Phone();
productArray[4] = new Phone();
productArray[5] = new Phone();
productArray[6] = new Book();
productArray[7] = new Phone();
productArray[8] = new Book();
productArray[9] = new Phone();
}
}
二、instanceof運算子
Java 提供的運算子,用來進行型別的判斷。 使用 instanceof 時,物件的型別必須和instanceof後面 的引數所指定的類在繼承上有上下級關係(對介面與具體實現類同樣適用)
語法格式:物件(引用)instanceof 型別 運算結果為boolean值
public class Test04 {
public static void main(String[] args) {
Book book=new Book();
//返回true
System.out.println(book instanceof Book);
//返回true,因為Book類時Product類的子類,存在繼承關係
System.out.println(book instanceof Product);
}
}
三.向下轉型
利用強制轉換,將父類轉換為子類,就是向下轉型, 轉換成子類後,可以呼叫子類特有的屬性和方法。
語法格式:<子型別> <引用變數名> = (<子型別> )<父型別的引用變數>;
注意:在向下轉型的過程中,如果沒有轉換為真實子類型別,會出現型別轉換異常(classCastException)。
Product product=new Phone();
// 向下轉型
Book book = (Book)product;
為了避免異常的出現,所以一般下轉型都和instanceof運算子配合起來使用
先進行型別判斷,在進行向下轉型。
if(product instanceof book){
Book book = (Book)product;
}
總結
以上就是今天的學習內容,主要講述了,向上轉型,向下轉型的語法格式,目的以及instanceof運算子.新手起步,說的不對的地方,隨時歡迎dalao斧正。