目录
前言
- 该文章为Java基础自学笔记
- 其他内容:Java基础学习笔记目录
- 学习用书:
《Java核心技术 卷Ⅰ 基础知识(第10版)》
《Java经典编程300例》
第二十一章 多态
- 面向对象的三大特征:封装、继承、多态
- 同类型的对象,执行同一个行为,会表现出不同的行为特征
21.1 多态的常见形式
父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器;
21.2 多态中成员访问特点(重点)
public abstract class Animal {
public String name = "父类——动物";
public abstract void eat();
}
class Dog extends Animal {
public String name = "子类——狗";
@Override
public void eat() { System.out.println("狗吃骨头");}
}
- 方法调用: 编译看左边,运行看右边
Animal animal = new Dog();
animal.eat(); // 运行结果:狗吃骨头
- 变量调用: 编译看左边,运行看左边(多态侧重行为多态)
Animal animal = new Dog();
System.out.println(animal.name); // 运行结果:父类——动物
21.3 多态的前提
- 有继承/实现关系
- 有父类引用指向子类对象
- 有方法重写
21.4 多态的特点
- 在多态形式下,右边对象可以实现解耦合,便于扩展和维护
Animal animal = new Dog();
animal.eat();
可直接将new Dog()修改为new Cat(),后续业务行为随对象而变,后续代码无需修改
Animal animal = new Cat();
animal.eat();
- 定义方法的时候,使用父类型作为参数,该方法就可以接收者父类的一切子类对象,体现出多态的扩展性与便利
public void go(Animal a) {
a.eat();
}
Animal a1 = new Dog();
go(a1);
Animal a2 = new Cat();
go(a2);
- 多态下不能使用子类的独有功能