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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Happys 中级黑马   /  2013-12-12 21:37  /  897 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 多态
    1.1 定义
            某一类事物的多种存在形态      
    1.2 举例
            比如动物中猫,狗
      猫这个对象对应的类型是猫类型
           猫 c = new 猫();
     同时也是动物中的一种,也可以把猫称为动物
           动物 y = new 猫();
      动物是猫和狗具体事物中抽取出来的父类型
           父类型引用指向了子类对象
    1.3 多态在程序中的体现
            父类或者接口的引用指向了自己的子类对象
    1.4 多态的前提
            1、必须有继承或者实现关系
            2、通常都有覆盖的操作
    1.5 多态的好处
            提高了程序的扩展性和后期的维护性,当有多个同一继承体系的对象
            进行操作时,可以使用多态的特性来简化代码
    1.6 多态的弊端
            多态的出现,虽然可以让前期的程序使用后期的内容,
            但是不可以使用子类的特有内容。
    1.7 多态的转型
            1.7.1 向上转型(类型提升)
                       向上转型是子类对象提升为父类类型。
                       提升的好处:就是提高了扩展性,隐藏了子类型
                       提升的局限性:只能使用父类中的方法,如果子类有覆盖的话,运行的是子类的内容。
                       Animal a = new Cat();  // Cat类型向上转型为Animal
            1.7.2 向下转型(强制类型转换)
                       向下转型是将存储着子类对象的父类类型引用强制转换为子类类型
                       好处:可以使用具体子类类型的特有内容
                       Cat c = (Cat) a;
                       c.catchMouse();
            1.7.3 注意事项
                       a.对于子父类转型动作,自始自终都是子类对象在做着类型的转换而已。
                         不能将父类的对象强制转换成子类类型。
                         Cat c = (Cat) new Animal(); // 这是错误的
                       b.父类型向下转成子类型时,因为子类型不唯一,所以需要进行判断
                         Animal a = new Cat();
                         // 使用instanceof,对象 instanceof 类或接口
                         // 记住:一旦需要向下转型,必须先判断
                         if (a instanceof Dog)
                         {
                            Dog d = (Dog) a;  // ClassCastException
                            c.lookHome();
                         }
    1.8 多态成员的特点
            a.成员函数
                  多态调用时,对于成员函数,编译时期参考引用类型变量所属的类中是否有
                  被调用的方法,有就编译通过,否则就失败。运行时期,参考对象所属的类中
                  是否有被调用的方法。简单说,编译看左边,运行看右边
            b.成员变量
                  多态调用时,对于成员变量,无论是编译时期还是运行时期,都参考引用变量所属
                  的类中的成员变量,参考等号的左边
            c.静态函数
                  编译和运行都看左边
2. Object类
    Object是所有类的超类,所有对象都具备的方法定义在该类中
        1,equals(Object obj)  对象比较,比较的是地址值
        2,getClass()  返回当前对象对应的Class对象,每一个.class文件都会对应一个Class对象
        3,hashCode()    返回哈希值
        4,toString()         
        通常一个类都会覆盖equals,hashCode,toString,创建该类自己的功能


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马