一、概念
1.上轉型
假如現在有兩個類,一個是父類,一個是繼承了父類的子類
把子類的對象交給父類去引用,就是上轉型
特點
上轉型得來的父類對象只能使用父類中存在的方法,如果子類重寫了這個方法,那就是調用子類的方法
2.下轉型
假如父類的對象是子類上轉型而來的,將這個父類對象強轉成子類對象,就是下轉型
特點
就是相當於重新new了一個子類對象,不是上轉型得來的對象不能下轉型
二、代碼演示
代碼
package test1;
/**
* @author xxj
* 上轉型下轉型測試
*/
public class TransformationTest {
public static void main(String[] args) {
//上轉型,用父類對象去裝子類對象實例
Animal aCat=new Cat();
aCat.call();
aCat.crawl();
//下轉型,將上轉型轉換過來的父類轉成子類
Cat cat1=(Cat)aCat;
cat1.scratch();
//不是上轉型得來的父類不能下轉型
Animal animal=new Animal();
((Cat) animal).scratch();
}
public static class Cat extends Animal{
public void scratch(){
System.out.println("cat撓");
}
@Override
public void crawl() {
System.out.println("cat爬");
}
}
public static class Animal{
public void crawl(){
System.out.println("animal爬");
}
public void call(){
System.out.println("animal叫");
}
}
}
結果
animal叫
cat爬
cat撓
Exception in thread "main" java.lang.ClassCastException: test1.TransformationTest$Animal cannot be cast to test1.TransformationTest$Cat
at test1.TransformationTest.main(TransformationTest.java:18)
三、總結
感覺上轉型和下轉型沒有太大的用處,可能是我個人水平不高,感覺不到這有什麼用。
不僅僅是class,還有interface也是有這種特性。
——————————————————————————————
如果本文章內容有問題,請直接評論或者私信我。
未經允許,不得轉載!