歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 向上轉型和向下轉型

Java 向上轉型後不能使用子類中的新方法,對於使用被重寫的方法名時還是用重寫後的方法體(即子類中的方法體)。

Java 向下轉型運行時會報錯(注意並不是int與char之間的轉換)。但是問題的關鍵是編譯時不會報錯! 詳見具體運行實例:

[java]
  1. package com.han;  
  2.   
  3. public class Test {  
  4.     int[] a;  
  5.     int b=10;  
  6.     public Test(){  
  7.         int[] a={8,9};  
  8.         try{  
  9.             System.out.println(a[0]);  
  10.         }catch(ArrayIndexOutOfBoundsException e){  
  11.             String strFile=e.getMessage();  
  12.             System.out.println(strFile);  
  13.             new InnerClass();  
  14.         }  
  15.     }  
  16.      void testException() {  
  17.     }  
  18.     void testOwned(){  
  19.         System.out.println("It is Test's own method.");  
  20.     }  
  21.     void test1() {  
  22.          a=new int[]{1,2,3};  
  23.          a[2]=b;  
  24.          System.out.println(a[2]);  
  25.         }  
  26.     public static void main(String[] args) {  
  27.         Test t=new Test();  
  28.         t.test1();  
  29.         for(int e:t.a){  
  30.             System.out.println(e);  
  31.         }  
  32.     }  
  33.   
  34.     class InnerClass{  
  35.         InnerClass(){  
  36.             System.out.println("OK");  
  37.         }  
  38.           
  39.     }  
  40. }  

[java]
  1. package com.han;  
  2.   
  3. /** 
  4.  * @author Gaowen HAN 
  5.  * 
  6.  */  
  7. public class Test2 extends Test{  
  8.       
  9.     @Override  
  10.     void test1(){  
  11.         System.out.println("This is a overriding.");  
  12.     }  
  13.     void newMethodTest2(){  
  14.         System.out.println("This is a new method for Test2.");  
  15.     }  
  16.   
  17.     public static void main(String[] args) {  
  18.         Test2 t1=new Test2();  
  19.         t1.testOwned();  
  20.         t1.newMethodTest2();  
  21.         t1.b=11;  
  22.         t1.test1();  
  23.         for(int e:t1.a){  
  24.             System.out.println(e);  
  25.         }  
  26.     }  
  27. }  
[java]
  1. package com.han;  
  2.   
  3. public class Test3 {  
  4.   
  5.     /** 
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         @SuppressWarnings("unused")  
  10.         Test2 t2=(Test2) new Test();//運行時報錯Exception in thread "main" java.lang.ClassCastException: com.han.Test cannot be cast to com.han.Test2   
  11.         //System.out.println(t2.b);   
  12.     }  
  13.   
  14. }  
所以為了避免向下轉型帶來的問題,Java 1.5後引入了泛型機制,不僅使得編程人員可以少寫某些代碼,並且保證了編譯時的類安全檢查。
而對於向上轉型後則是可以用instanceof關鍵字來判斷對象引用的到底是哪個子類。
Copyright © Linux教程網 All Rights Reserved