黑马程序员技术交流社区

标题: 关于多态 [打印本页]

作者: 张水荣    时间: 2012-7-19 12:55
标题: 关于多态
本帖最后由 张水荣 于 2012-7-19 21:43 编辑


多态使用的条件:
1. 要有继承
2. 要有重写
3. 父类引用指向子类对象
请问下面的一个例子有没有使用多态:
  1. public static void printObject(Objedt obj) {
  2.      Class cla = obj.getClass();
  3.     if( cla.isArray() ) {
  4.         int len = Array.getLength(obj);
  5.         for(int i = 0; i < len; i ++) {
  6.             System.out.println(Array.get(obj,i));
  7.         }
  8.     } else {
  9.         System.out.println(obj);
  10.     }
  11. }
复制代码



作者: 周玉龙    时间: 2012-7-19 13:30
public static void printObject(Objedt obj) {//这里是定义一个静态的无返回值的名字叫做printObject 的方法,参数为一个Objectl类,Object类是所有类的父类。大括号中是方法体。
     Class cla = obj.getClass();                   //获取obj对象的字节码Class文件对象,赋给cla。
    if( cla.isArray() ) {                               //if条件语句,cla.iaArray()的意识就是判断他是否是一个数组。如果是就走if控制的代码块、如果不是就走else控制的代码块。
        int len = Array.getLength(obj);        //用Array类里面的getLength()方法获取obj数组的的长度,并赋值给int的变量len。
        for(int i = 0; i < len; i ++) {             //for循环,
            System.out.println(Array.get(obj,i));//打印得到的obj数组中的每个值。假如传进去的是int[] arr={1,2,3}.就打印出1,2,3
        }
    } else {                                             //如果传进来的不是一个数组,就走下面的代码块。
        System.out.println(obj);                  //假如传进来的是一个String str = "abc",那么打印出来的就是abc。
    }
}
传进来的参数是你在main方法中调用这个方法是所需要给出的参数。
所有这个没有涉及到多态。希望你能明白。
作者: 杨卓儒    时间: 2012-7-19 13:36
在我看来没有用到多态,只有继承了Object的类,但是没有重写,没有覆盖,应该说我暂时没看出来啊 不知道对不对
作者: 王龙彪    时间: 2012-7-19 13:41
cia继承了Object的类
  1. System.out.println(Array.get(obj,i));
复制代码
这句是使用了多态的
作者: 杨卓儒    时间: 2012-7-19 14:28
王龙彪 发表于 2012-7-19 13:41
cia继承了Object的类这句是使用了多态的

重写和引用在哪里
作者: 王龙彪    时间: 2012-7-19 14:30
Lewis 发表于 2012-7-19 14:28
重写和引用在哪里

不是一定要重写的
那个Object就是引用
作者: 杨卓儒    时间: 2012-7-19 14:38
王龙彪 发表于 2012-7-19 14:30
不是一定要重写的
那个Object就是引用

Object是对象的意思吧?  就像 String[] args中的String一样,只是表示接受的参数的类型吧?
作者: 张水荣    时间: 2012-7-19 15:17
王龙彪 发表于 2012-7-19 14:30
不是一定要重写的
那个Object就是引用

多态好像必须满足以上三个条件的吧!
作者: 王龙彪    时间: 2012-7-19 16:19
Lewis 发表于 2012-7-19 14:38
Object是对象的意思吧?  就像 String[] args中的String一样,只是表示接受的参数的类型吧? ...

Object不是对象,是一个类,所有类的父类
class出来的任何类都是Object的子类,都默认继承了Object,都可以使用Object里的函数...
作者: 王龙彪    时间: 2012-7-19 16:20
张水荣 发表于 2012-7-19 15:17
多态好像必须满足以上三个条件的吧!

继承接口才必须要重写里面的方法
继承的父类如果需要重新实现里面的功能的话,才需要重新,不然直接使用父类的方法就可以 了




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