溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多態(tài)的使用方法是什么

發(fā)布時間:2022-01-07 20:24:38 來源:億速云 閱讀:167 作者:iii 欄目:編程語言

本篇內容主要講解“Java多態(tài)的使用方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java多態(tài)的使用方法是什么”吧!

一.再探向上轉型(upcasting)

  將某個object reference視為一個“reference to base type“的動作,稱為向上轉型。

1.  Upcasting后調用某個函數時,如果derived class中覆寫了該函數,則會調用derived class中的函數;否則,會調用base class中的函數。如

class First{

  public void prt(){

  System.out.println("First");

  }

}

class Second extends First{

  //(a)

  public void prt(){

  System.out.println("Second");

  }

}

public class ExplicitStatic{

  public static void main(String[] args){

  First n = new Second();

  n.prt();;

  }

}

結果為Second。如果當Second class中的prt()函數注釋掉,將輸出First。

2.  向上轉型后只能調用base class中被derived class覆寫的函數。

/*

abstract class First{

  int i = 122;

  public void prt(){

  System.out.println("First.i = " + i);

  }

  public abstract void prt(First f);

}

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

class Second extends First{

  public void prt(){

   System.out.println("Second.i = " + i);

  }

  public void prt(First i)

  {

  }

  public void prt(int i)

  {

  }

}

public class ExplicitStatic{

  public static void main(String[] args){

  First n = new Second();

  n.prt(2);;

  }

}

*/

class First{

  public void prt(){

  System.out.println("First");

  }

}

class Second extends First{

  //(a)

  public void prt(){

  System.out.println("Second");

  }

  public void prt(int i){//(a)

  System.out.println("Second.i = " + i);

  }

}

public class ExplicitStatic{

  public static void main(String[] args){

  First n = new Second();

  n.prt(3);

  }

}

(a)處的函數只是Second class中的函數,所以不能通過n.prt(3)進行調用。

二.Abstract class和Abstract methods

1.  如果一個class中存在abstract class,則class也必須被聲明為abstract class。

2.  abstract class不能被實例化。

3.  如果base class是一個abstract class,那么derived class必須實現(xiàn)base class中所有的abstract methods;否則,derived class也必須被聲明為abstract class。

三.其它要點

1.  純粹繼承與擴充

純粹繼承:只有base class所建議的函數,才被derived class加以覆寫。

擴充:除了覆寫base class的函數,還實現(xiàn)了自己的函數

  abstract class First{

  public abstract void f();

  public abstract void g();

}

//純粹繼承

class Second extends First{

  public void f(){}

  public void g(){}

}

//擴充

class Third extends First{

  public void f(){}

  public void g(){}

  public void u(){}//base class不存在的函數

}

2.  向下轉型

1)  向下轉型時只能調用base class中被覆寫過的函數

2)  只有本來就為derived class對象時才能正確向下轉弄。

class First{

  public void f(){}

  public void g(){}

}

class Second extends First{

  public void f(){}

  public void g(){}

  public void u(){}

  public void v(){}

}

public class ExplicitStatic{

  public static void main(String[] args){

   First[] x = {new First(), new Second()};

  x[0].f();

  x[1].g();

  //!x[1].u();class First中不存在函數u()

  //((Second)x[0]).f();(a)

  ((Second)x[1]).u();

}

  }

  (a)處會拋出ClassCastException異常。

到此,相信大家對“Java多態(tài)的使用方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI