美文网首页java随笔
多态 ---- 内部类

多态 ---- 内部类

作者: 71150ce14a00 | 来源:发表于2017-06-23 19:04 被阅读1次

    多态: 父类的引用指向子类对象,或者接口指向实现类 Animal an = new Dog();

    前提:必须要有继承,或者接口实现
    好处: 可以通过父类管理子类,提高代码复用性

    注意: 我们在使用多态的时候,永远只能使用父类的类型接收子类的类型

    多态弊端:
    在使用多态技术的时候, 程序在编译的时候,使用多态调用成员(成员变量,成员函数) 要求被调用的成员一定在父类中存在,如果父类中没有,那么编译就会失败(不能使用子类属性或者函数)

    注意: 只要有多态的地方,一定发生着类型转换(把子类的对象用父类表示)
    隐式类型转换 小的给大的赋值 double d = 12; Animal a = new Dog();
    强制转换类型 缺点: 丢失数据 Cat c = (Cat) animal;

    多态中的类型转换有两种:
    1 向上转型(隐式的类型提升)父引用指向子类对象 例如: Animal an = new Dog();
    2 向下转型(强制类型转换或者把父类类型转成子类类型) 例如: Dog d = (Dog)an;

    什么时候使用向下类型转换: 只要在程序中需要使用子类的特有属性的时候,无论是向上还是向下,最终都是子类对象做着类型转化

    向下转型有风险, 使用需谨慎,要是用前先做判断: 被转引用类型 instanceof 被转成的类型

    在多态中成员变量: 永远只会使用父类中的成员变量, 不会使用子类中的成员变量
    多态调用静态函数: 对于静态成员方法,无论是编译还是运行, 只看父类,和子类无关
    多态中调用非静态函数: 编译要求父类必须存在, 运行先看子类,如果子类有执行子类,如果没有执行父类

    内部类:

    在内部类中可以直接访问外部类中所有成员, 而外部类不能直接访问内部类中成员,需要创建内部类对象访问

    对于局部内部类使用外部类的局部变量注意事项: 局部变量一定要加 final

    匿名内部类 必须在成员函数中
    匿名内部类其实就是一个带有内容的子类对象
    new 父类或者父接口(){
    复写父类或者父接口中的方法
    }
    整体是子类对象
    {}里边的是匿名内部类
    父类或者父类接口名字 = new 父类或父类接口(){ // 这里实行多态
    // 父类 // 子类对象
    }

    相关文章

      网友评论

        本文标题:多态 ---- 内部类

        本文链接:https://www.haomeiwen.com/subject/lgaccxtx.html