继承和多态(向上转型、向下转型)
1 概念
1.1 继承
继承的基本思想是,可以基于已有的类创建新的类。继承已存在的类就是复用(继承)这些类的方法,而且可以增加一些新的方法和字段(成员变量),使新类能够适应新的情况。
1.2 多态
在Java核心技术卷 I 中有这样一段话:“对象变量是多态的。一个Employee(超类)类型的变量既可以引用一个Employee类型的对象,也可以引用Employee类的任何一个子类的对象(如:Manager、Executive、Secretary等)”。
上面这句话就体现了多态的思想(一对多),有句简单的口诀就是“左父右子为多态”,即父类引用指向子类对象就是多态。这句话可能初学者有点绕口,这里解释一下:
如:Employee staff = new Employee()这条语句,这里的staff就可以称为对象引用,new Employee可以称为在内存中创建了一个对象实例。
补充:
1. 八种基本类型:4+2+1+1,即四种整形(byte,short,int,long),两种浮点类型(float,double),一种Unicode编码字符单元(char),一种真值(boolean)。
2. 三种引用类型:类class,接口interface,数组array。
2 向上转型
向上转型顾名思义就是父类引用指向子类对象,即将子类对象赋值给父类的引用,这样做是不需要强制转化的,因为子类相对父类功能更多,父类有的子类都有,使用父类的引用调用父类方法不会出现没有某个方法而出错。这样做的意义是定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。代码上体现:
Employee staff = new Employee() //父类引用指向子类对象,即向上转型,不需要强转
3 向下转型
与向上转型相反,向下转型即子类引用指向父类对象。显然这种会出现调用不了某些方法的情况,因为子类本来就是父类的扩展。当然某些情况下需要转型的时候就可以手动强制转化,这里只能是父类强制转化成子类,同一个父类的两个子类之间不能强制转化。代码上体现:
Manager manager = (Manager)new Employee(); // 可以,Manager是Employee的子类
Manager manager = (Manager)new Secretary(); // 错误,Manager和Secretary都是Employee的子类