黑马程序员技术交流社区

标题: java中实现多态的机制 [打印本页]

作者: 罗力    时间: 2012-11-1 21:50
标题: java中实现多态的机制
关于java中实现多态的机制是什么?
作者: 樊鹏飞    时间: 2012-11-1 21:54
本帖最后由 樊鹏飞 于 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. }
复制代码

作者: 奋斗的青春    时间: 2012-11-1 21:55
本帖最后由 吴愿涛 于 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,它无法添加重复元素

作者: 梁胜海    时间: 2012-11-2 00:00
你自己去博客看看,我对多态有详细的解答,保证你的疑惑都能解决。http://blog.csdn.net/lsh609912726/article/details/8134729。多态不是一两句话就能说清的,但记住一句话父类型的引用指向了子类型的对象。
作者: 高境    时间: 2012-12-18 10:17
要多多学习。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2