A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈善奔 中级黑马   /  2013-12-26 13:26  /  1139 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈善奔 于 2013-12-26 20:43 编辑

看到天天有人说多态,多态是什么?最好有代码例子!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
FFF 金牌黑马 2013-12-26 13:32:12
沙发
多态,就是可以用多种方式处理传进来的不同问题。
继承,重载,重写。就是多态的体现。
回复 使用道具 举报
用对象来解释就是:对于同样的一个消息,不同的对象有不同的反应。这主要是通过类的继承、重写实现的。
回复 使用道具 举报
讲下多态的定义:①操作名称的多态,就是重载:有多个操作(方法)具有相同的名字,但是传入的参数不同。例如-->
  1. nihao(){}//1
  2. nihao(int a ){}//2
  3. nihao(int a,b){}//3
  4. nihao(float a){}//4
复制代码

上面四个都是方法,名称相同,但是参数不同。调用他们时:nihao();nihao(2);nihao(2,3);nihao(2.3);

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
我自己的理解。一个事物有多种体现形式,给你举个例子吧,比如动物这一事物,猫,狗,猪都是动物的体现形式。再比如人这一事物,有学生,工人,老师。诸如此类就是多态了。体现多态的机制:父类对象可以指向子类的引用,例如Person p = new Student();我是这么理解的。
回复 使用道具 举报
②与继承有关的多态:同一操作被不同类型调用时可能产生不同的行为。
这个在抽象类中或者接口中很常用。例如:
  1. class Animal{
  2.         void cry(){}
  3. }
  4. class Dog extends Animal{
  5.         void cry(){
  6.                 System.out.println("WangWang...");
  7.         }
  8. }
  9. class Cat extends Animal{
  10.         void cry(){
  11.                 System.out.println("miao...");
  12.         }
  13. }
  14. public class Test{
  15.         public static void main(String args[]){
  16.                 Animal animal;
  17.                 animal=new Dog():
  18.                 animal.cry();
  19.                 animal=new Cat();
  20.                 animal.cry();
  21.         }

  22. }
复制代码

animal.cry()都是调用哭的方法,但是由于不同对象的上转型对象(这个你看了就应该知道,就是子类引用指向父类对象)。所以产生了不同的行为。这个多态是很有用的,可以实现开闭源。一定要看懂。{:soso_e130:}
回复 使用道具 举报
lichao 中级黑马 2013-12-26 15:16:15
7#
多态:指允许不同类的对象对同一消息作出响应。说通俗一点就是父类对象的引用子类对象
如:
  1. abstract class Animal//接口  //多态的前提是必须有继承或实现,必须有方法重写或覆盖
  2. {
  3.         abstract void eat();

  4. }

  5. class Cat extends Animal//实现类
  6. {
  7.         public void eat()//覆盖方法
  8.         {
  9.                 System.out.println("吃鱼");
  10.         }
  11.         public void catchMouse()
  12.         {
  13.                 System.out.println("抓老鼠");
  14.         }
  15. }


  16. class Dog extends Animal//实现类
  17. {
  18.         public void eat()//覆盖方法        {
  19.                 System.out.println("吃骨头");
  20.         }
  21.         public void kanJia()
  22.         {
  23.                 System.out.println("看家");
  24.         }
  25. }


  26. class Pig extends Animal//实现类
  27. {
  28.         public void eat()//覆盖方法        {
  29.                 System.out.println("饲料");
  30.         }
  31.         public void gongDi()
  32.         {
  33.                 System.out.println("拱地");
  34.         }
  35. }

  36. //-----------------------------------------


  37. class DuoTaiDemo
  38. {
  39.         public static void main(String[] args)
  40.         {
  41.                 //Cat c = new Cat();
  42.                 //c.eat();

  43.                 //Dog d = new Dog();
  44.                 //d.eat();
  45.                 //Cat c = new Cat();
  46.                 /*
  47.                 Cat c1 = new Cat();
  48.                 function(c1);

  49.                 function(new Dog());
  50.                 function(new Pig());
  51.                 */

  52.                 //Animal c = new Cat();
  53.                 //c.eat();                               Animal a = new Cat();//多态                Animal a = new Dog();//多态                Animal a = new Pig();//多态               
  54.                 function(new Cat());
  55.                 function(new Dog());
  56.                 function(new Pig());
  57.                

  58.                
  59.         }
  60.         public static void function(Animal a)//Animal a = new Cat();//多态
  61.         {
  62.                 a.eat();
  63.                 //a.catchMouse();
  64.         }
  65.         /*
  66.         public static void function(Cat c)//
  67.         {
  68.                 c.eat();
  69.         }
  70.         public static void function(Dog d)
  71.         {
  72.                 d.eat();
  73.         }

  74.         public static void function(Pig p)
  75.         {
  76.                 p.eat();
  77.         }
  78.         */

  79. }
复制代码
多态的好处        多态的出现大大的提高程序的扩展性。多态的弊端:        提高了扩展性,但是只能使用父类的引用访问父类中的成员。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马