1. 程式人生 > >多態性

多態性

() pos 如果 ava 安全 錯誤 ron ring args

Java中多態性主要表現在兩個方面:方法的重載和覆寫對象的多態性

對象的多態性主要表現在以下兩種類型:

  • l 向上轉型:子類對象->父類對象 父類 父類對象 = 子類實例;
  • l 向下轉型:父類對象->子類對象 子類 子類對象 = (子類)父類對象;

1、向上轉型:用子類對象轉型到父類對象調用的還是子類覆寫過得方法,但註意這樣的父類對象不能調用父類中沒有的方法。此處的父類對象可以使接口。

 1 class A{
 2     void print1() {            //定義print1
 3         System.out.println("父類print1");}
4 } 5 class B extends A{ 6 void print1() { //覆寫父類的print1 7 System.out.println("子類print1");} 8 void print2() { 9 System.out.println("子類print2");} 10 } 11 public class Test{ 12 public static void main(String args[]) { 13 A a = new B(); 14 a.print1(); //
此處調用覆寫過得print1 15 } 16 }

2向下轉型過程中,分為兩種情況:

情況一:如果父類引用的對象如果引用的是指向的子類對象,那麽在向下轉型的過程中是安全的。也就是編譯是不會出錯誤的。

情況二:如果父類引用的對象是父類本身,那麽在向下轉型的過程中是不安全的,編譯不會出錯,但是運行時會出現java.lang.ClassCastException錯誤。它可以使用instanceof來避免出錯此類錯誤。

 1 class A{
 2     void print1() {            //定義print1
 3         System.out.println("父類print1");
4 5 } 6 } 7 class B extends A{ 8 void print1() { //覆寫父類的print1 9 System.out.println("子類print1"); 10 } 11 void print2() { 12 System.out.println("子類print2"); 13 } 14 } 15 public class Test{ 16 public static void main(String args[]) { 17 A a = new B(); //轉型成功 18 B b = (B)a; 19 // A a = new A(); //轉型失敗 20 // B b = (B)a; 21 b.print1(); 22 } 23 }

多態性