黑马程序员技术交流社区
标题:
面向对象(多态)
[打印本页]
作者:
18923420612
时间:
2016-9-2 08:25
标题:
面向对象(多态)
多态:
前提:
要有继承关系
要有方法重写
要有父类引用指向子类对象
成员变量的访问:
编译和运行都看左边
成员方法的访问:
编译看左边, 运行看右边
静态方法:
编译和运行都看左边(静态方法属于类)
向上转型和向下转型:
向上转型: 父类引用指向子类对象, 对应基本数据类型的自动类型提升
向下转型: 父类强转成子类, 对应基本数据类型的强制类型转换
必须要先有向上转型, 再有向下转型
多态的好处和弊端:
弊端:
不能使用子类的特有属性和行为, 需要向上转型和向下转型才可以
好处:
提高了代码的维护性(由继承保证)
提高了代码的扩展性(由多态保证)
应用场景:
可以当作方法的形参去接收任意的子类对象
抽象类(abstract):
特点:
修饰类: abstract class 类名{}
修饰方法: public abstract 返回值类型 方法名();
抽象类中不一定有抽象方法, 但是有抽象方法的一定是抽象类
抽象类的子类:
要么是抽象类
要么是重写了所有抽象方法的具体子类
抽象类不能实例化, 必须通过具体的子类去创建对象
成员的特点:
成员变量: 既可以是变量 也可以是常量, abstract不能修饰成员变量
构造方法: 有.
成员方法: 既可以是抽象的, 也可以是非抽象的.
abstract不能共存的关键字:
static: 直接通过类名去调用一个抽象方法是没有意义的
private: 被private修饰的方法不能被子类访问, 但是被abstract修饰的方法强制子类去重写, 矛盾
final: 被final修饰的方法不能被子类重写, 但是被abstract修饰的方法强制子类去重写, 矛盾
接口: interface
接口特点
*class 类名 implements 接口名
*接口不能被实例化, 只能通过实现了接口中所有抽象方法的具体子类去创建对象
*接口的子类:
* 可以是抽象类
* 实现了接口中所有抽象方法的具体子类
成员特点:
构造方法: 无
成员变量:
*只能是常量
*修饰符: public static final
成员方法:
*只能是抽象方法
*修饰符: public abstract
关系:
类与类:
单继承
接口与接口:
既可以单继承, 也可以多继承
类与接口:
既可以单实现, 也可以多实现, 还可以在继承一个类的基础上去实现多个接口
接口与抽象类的区别:
设计理念区别:
抽象类: "is a" 的关系, 抽象类中定义的是继承体系中的共性功能
接口: "like a" 的关系, 接口中定义的是继承体系中的扩展功能
作者:
谢忠良
时间:
2016-9-2 09:46
背的不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2