首頁 >Java >java教程 >Java中的多型用法實例分析

Java中的多型用法實例分析

高洛峰
高洛峰原創
2017-01-19 13:57:011385瀏覽

本文實例講述了Java中的多態用法。分享給大家供大家參考。具體分析如下:

多態,是物件導向的程式設計語言最核心的特徵。封裝性、繼承性都比較簡單,所以這裡只對多型做一個小小的筆記。 。 。

1、什麼是多態?

多態意味著一個物件可以多重特徵,可以在特定的情況下,表現出不同的狀態,從而應對不同的屬性和方法。在Java中,多態的實作指的是使用同一個實作接口,以實作不同的物件實例。

例如,我們定義一個Parent類,再定義一個getName()方法回傳一個字串,定義一個形參為Parent類型的成員方法doSomething(Parent obj),在這個方法中呼叫obj.getName()。然後再定義兩個類別A和B,都從Parent類別繼承而來,在子類別中重寫getName()方法。最後在main方法中建立一個Parent類別的物件objP,呼叫objP.doSomething()方法並向其傳遞class A,和class B 的參考。觀察輸出結果。

class Parent 
{ 
  private String name = "parent"; 
  public String getName() 
  { 
    return this.name; 
  } 
  public void doSomething(Parent obj) 
  { 
    //输出类名 
    System.out.println(obj.getName()); 
  } 
  public static void main(String[] args) 
  { 
    Parent objP = new Parent(); 
    objP.doSomething(new A());
 // 传递A的引用,则调用的是A类的getName方法
    objP.doSomething(new B());
 // 传递B的引用,则调用的是B类的getName方法
  } 
} 
class A extends Parent 
{ 
  private String name = "class A"; 
  //@重写getName()方法 
  public String getName() 
  { 
    return this.name; 
  } 
} 
class B extends Parent 
{ 
  private String name = "class B"; 
  //@重写getName()方法 
  public String getName() 
  { 
    return this.name; 
  } 
}

可見,父類別的doSomething方法多型地呼叫了我們傳遞的物件的getName方法,而不是Parent類別本身的getName方法。

2、Java中的接口

Java中的接口,是一系列方法的聲明。一個介面只有方法的特徵,而沒有方法的實作。這些方法可以從別處透過特定的類別來實現。在Java中,用關鍵字interface來聲明一個介面。

用介面實現多態的實例:

interface Name
{
  //只声明,不实现
  public String getName();
}
class A implements Name
{
  private String name = "class A";
  //实现getName方法
  public String getName()
  {
    return name;
  }
}
class B implements Name
{
  private String name = "class B";
  //实现getName方法
  public String getName()
  {
    return name;
  }
  public static void main(String[] args)
  {
    Name obj = new A();
    System.out.println(obj.getName());
  }
}

可以看到,印出了類別A的名字class A。

PS:一個類別如果沒有實作介面中的所有方法,那麼這個類別必須被宣告為abstract(抽象的)。一個abstract類別是不允許實例化物件的。

希望本文所述對大家的java程式設計有幫助。

更多Java中的多態用法實例分析相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn