黑马程序员技术交流社区

标题: 多态小结 [打印本页]

作者: Overheat    时间: 2015-7-13 01:16
标题: 多态小结
多 态★★★★★(面向对象特征之一):对象在不同时刻体现出来的不同状态。
                                                        针对引用类型:编译期间状态、运行期间状态。
体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat(); 
多态的好处:提高了程序的扩展性和可维护性。 
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性) 
多态的前提: 1、有继承或实现关系  2、有方法重写(没有重写也行,但这种方式没意义)  3、有父类引用指向子类对象。  
多态间的成员特点:方法有重写,变量没有。
        1、成员变量:不管是静态还是非静态,编译、运行都看左边。
        2、成员方法:编译看左边,运行看右边。
解释:在多态中,去用父类引用调用方法的时候,编译期间,不是去找子类的方法,编译被外界看到的编译状态是父状态。所以,会在父类中找有没有父类的引用要调用的方法,如果没有就报错。而运行的时候,首先会去找子类中有没有这个方法,如果有就执行儿子的,以为方法存在重写。而变量是编译、运行都看左边。


内部类:
        内部类:将一个类定义在另一个类的里面,对里面的那个类就称为内部类。
内部类位置:
        成员位置定义-----成员内部类
        局部位置定义-----局部内部类---方法中定义的类
                工作面试题:局部内部类访问局部变量,该变量必须被final修饰。为什么?
局部变量会在方法调用完毕后,立马消失。而局部内部类中如果有地方使用着局部变量,当方法消失后,这个方法区中的内容还没有消失,也就是说这个变量还必须存在。所以为了延长局部变量的生命周期,就加final修饰。
内部类使用:
在测试类中直接使用成员内部类格式:
                Outer.Inner oi = new Outer().new Inner();
内部类的两种常见修饰符:private(为安全)、static(为方便)。
如果内部类是静态的,调用格式:
                Outer.Inner oi = new 外部类名.内部类名();
       
内部类和外部类之间的调用方式:
1、内部类调用外部类成员-------当成自己的成员来用,直接使用。
2、外部类调用内部类-------在自己某个方法中,创建一个内部类对象  Inner  in = new Inner();
3、在测试类中直接调用内部类------Outer.Inner oi  = new Outer().new Inner(); ---------等于外部类对象.内部类对象
静态内部类
        内部类定义在成员位置上,static修饰,当内部类被static修饰后,只能访问外部类中的static成员,
        外部类访问静态内部类:new 外部类().内部类().内部类方法()
当内部类中定义了static静态成员,该内部类也必须是static的
作者: eayonh    时间: 2015-7-13 02:03
学习了……
作者: xiaoxinxin003    时间: 2015-7-13 04:23
赞一个,加油
作者: Jiwei    时间: 2015-7-13 07:40
赞一个!
作者: nanfp    时间: 2015-7-13 08:33
总结的很好,加油!!!
作者: fantianfei    时间: 2015-7-13 08:51
大概温习了遍




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