黑马程序员技术交流社区
标题:
第九天总结
[打印本页]
作者:
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