前面我们大概讲解了Java中的继承,这里有一个很重要的知识点,比如:
class Person {
public void doJob() {
System.out.println(“person do job”);
}
class Student extends Person {}
class Worker extends Person {}
那么,当基于student或者worker生成对象时,可以写成
Person student = new Student()
Person worker = new Worker()
这里涉及到一个知识点:向上转型,即子类可以把类型向上转为父类。这个点很重要,也是Java如此灵活的一个原因,后边涉及多态再详细展开。
本节重点讲一下多态
何为多态,也可以称为后期绑定,也就是上边的向上转型,在Java的运行期(后期),父类引用(Person student)指向(=)子类对象(new Student())。
这个有什么用处呢,用处大了。看下边的代码:
public class Factory {
private Person person;
public void setPerson(Person person){
this.person = person;
}
public doSpecialJob(){
person.doJob();
}
工厂类通过组合的方式包含了Person类,然后有一个doSpecialJob方法,让Person干活(doJob方法),这里由于向上转型的存在,也就是后期绑定或者多态的存在,注意多态(后期绑定)是向上转型的实现。工厂类中的Person可以传入一个student对象也可以传入一个worker对象,假如没有多态,那起码你要实现两个Factory类,一个包含了Student类,一个包含了Worker类。
有了后期绑定,你就可以在某种层面上(Factory类中)只和基类(Person)打交道了。而不用去关注基类具体指向了哪个子类对象。
下面我们来总结一下多态的好处:
1、可扩展性,Factory类中不需要改变任何代码,只需要传入的Person类被不同的子类继承即可。