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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多态:
        体现:父类的引用指向了自己的子类对象。
        Animal a = new Dog();
        好处:提高了程序扩展性,提高代码复用性,
        弊端:通过父类引用操作子类对象时,只能使用父类中已有的方法。不能操作子类所特有的方法。
        前提:类之间必须有关系:可以为继承,可以为实现,通常都有重写的方法。
       
1,转型:子类的特有的方法如何调用呢?
        animal a = new dog();//animal是父类型,new dog 是子对象。
        但是父类型引用指向子类对象时,这就是让子类对象进行了类型的提升(向上转型),
        好处:提高了扩展性,隐藏了子类型。弊端:不能使用子类型的特有方法。
        如果要想使用子类的特有方法,只有子类型可以用。
     可以向下转型,然后强制转换:
        animal a = new dog();
        a。eat();
        Dog d = (Dog)a;//强制类型转换
        d。lookhome();//然后可以调用子类的方法。
当需要使用子类的特有方法时  需要向下转型;
        无论向上转型还是向下转型,最终都是子类对象做着类型的变化。。

        转型总结:
        1,什么时候使用向上转型,1,提高程序扩展性,不关系子类型时(子类型被隐藏);
                2,不需要使用子类型的特有方法时,,
        2,什么时候使用向下转型?
                1,需要使用子类型的特有方法时,
                但需要使用 instanceof 进行类型判断,避免发生类型转换异常。


多态:体现:
        1,成员变量的特点:
                当子父类中出现同名的成员变量时,
                        多态调用该变量时:编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量,没有的话则会编译失败。运行时期:也是调用引用型变量所属的类中的成员变量。
                简单记:编译和运行时都要看等号左边的类型,则该成员变量所属于的类型就是左边的类型,编译和运行都是看左边。
        2,成员函数
                编译:参考左边,如果引用型变量所属的类中没有被调用的成员函数,则会编译失败,运行的话参考右边对象所属的类,编译看左边,运行看右边。
        3,静态函数
                静态函数是静态的绑定到类上。不绑定对象,加载时还没有对象。
                对于静态成员函数,编译和运行都参考左边。
                一般情况,静态方法是不会被多态调用的,因为静态方法不属于所属对象,而是所属于类。

结论:对于成员变量和静态函数,编译和运行都看左边。
对于成员函数,编译看左边,运行看右边。

0 个回复

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