黑马程序员技术交流社区

标题: 第九天总结 [打印本页]

作者: okchenyang44    时间: 2016-5-21 23:19
标题: 第九天总结
多态
        定义: 事物存在的多种形态
        前提:
                要有继承关系
                要有方法重写
                父类引用指向子类对象
        成员访问特点:
                成员变量: 编译看左边, 运行看左边
                成员方法:
                        *非静态成员方法: 编译看左边, 运行看右边(动态绑定)
                        *静态成员方法: 编译看左边, 运行看左边
                只有非静态的成员方法, 编译看左边, 运行看右边, 其余都是编译看左边, 运行看左边
        向上转型:
                父类引用指向子类对象,对应基本数据类型的自动类型提升
        向下转型:
                父类强转成子类, 对应基本数据类型的强制类型转换
        *必须要先有向上转型, 再有向下转型

        好处:
                提高了代码的维护性(继承)
                提高了代码的扩展性(多态)
                可以当作方法的形参接收任意的子类对象
        弊端:
                不能使用子类的特有属性和行为
        instanceof: 判断前面的引用是否是后面的数据类型  

抽象类
        抽象类的特点:
                abstract class 类名{}  
                抽象方法: 权限修饰符 abstract 返回值 方法名(参数列表);
                抽象类中不一定有抽象方法, 但是有抽象方法的类一定是抽象类
                抽象类不能实例化, 但是可以由具体的子类去实例化
                抽象类的子类
                        *要么是抽象类
                        *要么是实现了所有抽象方法的子类
        成员的特点:
                成员变量: 既可以是变量, 也可以是常量, 不能用abstract修饰成员变量
                成员方法: 既可以是抽象的, 也可以是非抽象的
                构造方法: 有, 用于子类访问父类数据的初始化
        不能与abstract共存的关键字:
                static: 直接通过类名去调用一个抽象方法是没有意义的
                private: 被private 修饰的方法不让子类访问, 但是abstract修饰的又要求子类强制重写, 矛盾
                final: 被final修饰的方法不允许被重写, 但是abstract又要求子类强制重写, 矛盾

接口:
        定义:
                狭义: interface 接口名{}
                广义: 对外提供规则的接口
        类实现接口: implements
        接口不能被实例化, 必须通过具体的子类去进行实例化
        接口的子类
                *可以是抽象类, 意义不大
                *也可以是重写了所有抽象方法的具体子类

        成员特点:
                构造方法: 没有构造方法
                成员变量: 只能是常量
                          默认修饰符: public static final
                成员方法:
                        只有抽象方法
                        默认修饰符: public abstract
                建议手动给出
       
        类与类: 继承(extends), 只能是单继承, 但是可以多层继承
        类与接口: 实现(implements), 既可以单实现, 也可以多实现, 还可以在继承一个类的基础上实现多个接口
        接口与接口: 继承, 既可以是单继承, 也可以是多继承

        与抽象类的区别:
                成员区别:
                        抽象类:
                                成员变量: 既可以是常量, 也可以是变量
                                成员方法: 既可以是抽象的, 也可以是非抽象的
                                构造方法: 有
                        接口:
                                成员变量: 只能是常量
                                成员方法: 只能是抽象方法
                                构造方法: 没有
                关系:
                        类与类: 只能是单继承
                        类与接口: 既可以是单实现, 也可以是多实现, 还可以在继承一个类的基础上实现多个接口
                        接口与接口: 既可以是单继承, 也可以是多继承
               
                设计理念:
                        抽象类: is a, 定义的是继承体系中的共性功能
                        接口: like a, 定义的是继承体系中的扩展功能






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