大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > 黑马程序员面向对象之多态

黑马程序员面向对象之多态

关键词:Java黑马程序员面向对象之多态  阅读(634) 赞(12)

[摘要]本文主要是对黑马程序员面向对象之多态的讲解,希望对大家学习黑马程序员面向对象之多态有所帮助。

  多态:可以理解为事物存在的多种体现形态。

  1、多态的体现

  父类的引用指向了自己的子类对象

  父类的引用也可以接收自己的子类对象

  2、多态的前提

  必须是类与类之间有关系,要么继承要么实现。

  通常还有一个前提:存在覆盖。

  3、多态的好处和弊端

  好处:多态的出现大大的提高了程序的扩展性

  弊端:提高了扩展性,但是只能使用父类的引用访问父类中的成员。

  代码演示:

  动物:猫,狗
  [java]
  abstract class Animal
  {
  public abstract void eat();
  }
  class Cat extends Animal
  {
  public void eat()
  {
  System.out.println("eat fish");
  }
  public void catchMoust()
  {
  System.out.println("catch mouse");
  }
  }
  class Dog extends Animal
  {
  public void eat()
  {
  System.out.println("eat bone");
  }
  public void lookHome()
  {
  System.out.println("look home");
  }
  }
  class Pig extends Animal
  {
  public void eat()
  {
  System.out.println("si liao");
  }
  public void gongDi()
  {
  System.out.println("gong di");
  }
  }
  class DuoTaiDemo
  {
  public static void main(String[] args)
  {
  /*
  Cat c1 = new Cat();
  Cat c2 = new Cat();
  Pig p = new Pig();
  function(c1);
  function(new Dog());
  function(p);
  */
  //Animal c = new Cat();
  //c.eat();
  //function(new Cat());
  //function(new Dog());
  //function(new Pig());
  Animal a = new Cat();//类型提升,向上转型
  a.eat();
  //如果想要调用猫的特有方法时,如何操作?
  //强制将父类的引用,转成子类类型。
  Cat c = (Cat)a;
  c.catchMouse();
  //千万不要出现这样的操作:将父类对象转成子类类型。
  //我们能转换的是父类引用指向了自己的子类对象时,该应用可以提升,也可以被强制转换
  //多态自始至终都是子类对象在这这变化
  //Animal a = new Animal();
  //Cat c = (Cat)a; ---->is error
  }
  public static void function(Animal a)
  {
  a.eat();
  if(a instanceof Cat)
  {
  Cat c = (Cat)a;
  c.catchMouse();
  }else if(a instanceof Dog)
  {
  Dog d = (Dog)a;
  d.lookHome();
  }
  }
  /*
  public static void function(Cat c)
  {
  c.eat();
  }
  public static void function(Dog d)
  {
  d.eat();
  }
  public static void function(Pig p)
  {
  p.eat();
  }
  */
  }



相关评论