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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗力 中级黑马   /  2012-11-1 21:50  /  1912 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于java中实现多态的机制是什么?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 樊鹏飞 于 2012-11-1 22:18 编辑

多态存在于在继承关系中 父类的引用指向子类对象   子类重写父类方法
  1. public class Test {
  2.       public static void main(String[] args) {
  3.            //多态
  4.           Animal a = new Dog();
  5.           a.eat();                         //其实是调用了dog类中的eat方法
  6.           a.sleep();                       //其实是调用了dog类中的sleep方法
  7.           System.out.println(a.number); //显示的属性仍旧是父类的
  8.      }
  9. }
  10. //父类 动物
  11. class Animal {
  12.      int number = 10;
  13.      public void eat() {
  14.           System.out.println("eat");
  15.      }

  16.      public void sleep() {
  17.           System.out.println("sleep");
  18.      }
  19. }
  20. //子类 狗
  21. class Dog extends Animal {
  22.        int number =20;
  23.       @Override
  24.       public void eat() {
  25.              System.out.println("狗吃肉");
  26.       }

  27.      @Override
  28.       public void sleep() {
  29.             System.out.println("狗睁着眼睡");
  30.      }
  31.      //狗自己的方法
  32.      public void play() {
  33.              System.out.println("狗玩飞碟");
  34.       }
  35. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-1 21:57 编辑

静态的多态:方法名相同,参数个数或类型不相同。(overloading)
动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
                   实现接口的实例传与接口的引用调用的实现类的方法。




希望楼主通过以下代码可以看明白:
Collection<Integer> list = new ArrayList<Integer>();
                Collection<Integer> set = new HashSet<Integer>();
                for(int i=0;i<5;i++){
                        list.add(i);
                        list.add(i);
                        set.add(i);
                        set.add(i);
                }
                System.out.println("list的大小为:"+list.size());
                for(Integer i: list){
                        System.out.println(i);
                }
                System.out.println("set的大小为:"+set.size());
                for(Integer i: set){
                        System.out.println(i);
                }


同样是Collection的实现类,同样调用add(Object o)方法,但是最终的表现却不同
list中被添加了10个元素,而set中只有5个元素
以上的表现就是多态,原因:
二者虽然都属于java.util.Collection接口的实现类
但是list所对应的是一个ArrayList,它可以添加重复元素
而set所对应的是一个HashSet,它无法添加重复元素

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
你自己去博客看看,我对多态有详细的解答,保证你的疑惑都能解决。http://blog.csdn.net/lsh609912726/article/details/8134729。多态不是一两句话就能说清的,但记住一句话父类型的引用指向了子类型的对象。
回复 使用道具 举报
要多多学习。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马