熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

黑馬程序員面向對象之多態

2013-11-23 19:17:32  來源: Java核心技術 

  多態可以理解為事物存在的多種體現形態

  多態的體現

  父類的引用指向了自己的子類對象

  父類的引用也可以接收自己的子類對象

  多態的前提

  必須是類與類之間有關系要麼繼承要麼實現

  通常還有一個前提存在覆蓋

  多態的好處和弊端

  好處多態的出現大大的提高了程序的擴展性

  弊端提高了擴展性但是只能使用父類的引用訪問父類中的成員

  代碼演示

  動物
  [java]
  abstract class Animal
  {
  public abstract void eat()
  }
  class Cat extends Animal
  {
  public void eat()
  {
  Systemoutprintln(eat fish
  }
  public void catchMoust()
  {
  Systemoutprintln(catch mouse
  }
  }
  class Dog extends Animal
  {
  public void eat()
  {
  Systemoutprintln(eat bone
  }
  public void lookHome()
  {
  Systemoutprintln(look home
  }
  }
  class Pig extends Animal
  {
  public void eat()
  {
  Systemoutprintln(si liao
  }
  public void gongDi()
  {
  Systemoutprintln(gong di
  }
  }
  class DuoTaiDemo
  {
  public static void main(String[] args)
  {
  /*
  Cat c = new Cat()
  Cat c = new Cat()
  Pig p = new Pig()
  function(c
  function(new Dog())
  function(p)
  */
  //Animal c = new Cat()
  //ceat()
  //function(new Cat())
  //function(new Dog())
  //function(new Pig())
  Animal a = new Cat()//類型提升向上轉型
  aeat()
  //如果想要調用貓的特有方法時如何操作?
  //強制將父類的引用轉成子類類型
  Cat c = (Cat)a;
  ccatchMouse()
  //千萬不要出現這樣的操作將父類對象轉成子類類型
  //我們能轉換的是父類引用指向了自己的子類對象時該應用可以提升也可以被強制轉換
  //多態自始至終都是子類對象在這這變化
  //Animal a = new Animal()
  //Cat c = (Cat)a; >is error
  }
  public static void function(Animal a)
  {
  aeat()
  if(a instanceof Cat)
  {
  Cat c = (Cat)a;
  ccatchMouse()
  }else if(a instanceof Dog)
  {
  Dog d = (Dog)a;
  dlookHome()
  }
  }
  /*
  public static void function(Cat c)
  {
  ceat()
  }
  public static void function(Dog d)
  {
  deat()
  }
  public static void function(Pig p)
  {
  peat()
  }
  */
  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26595.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.