标签:ceo 编程 继承 http sleep extend eof 图片 测试
1、多态的实现
创建Person类:
package pers.zhb.Person; public class Person { protected String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public void sleep() { System.out.println("睡觉"); } public void eat() { System.out.println("吃饭"); } }
创建学生类:
package pers.zhb.Person; public class Student extends Person { public Student(String name) { this.name = name; } public void study() { System.out.println("学习"); } }
创建测试类:
package pers.zhb.Person; public class Test { public static void main(String[] args) { /* * 当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。 只能使用父类和子类共有的的内容,而无法使用子类特有功能 */ Person s = new Student("Tom"); s.eat(); s.sleep(); /* * 为子类特有功能,需要向下转型 一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型 */ ((Student) s).study(); } }
2、向上转型和向下转型
向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程,向上转型之后,只能调用子父类共有的内容。例如:
Person s = new Student("Tom");
s.eat();
s.sleep();
睡觉和吃饭是子类和父类都有的方法。
向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的。向下转型后可以调用子类特有的功能。例如:
((Student) s).study();
学习为子类特有方法。
3、多态的好处与弊端:
好处:
(1)不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化(扩展性)。
(2)提高了代码的维护性(继承保证)。
弊端:
(1)只能使用父类和子类共有的的内容,而无法使用子类特有功能。
(2)ClassCastException异常,可以通过instanceof运算符,判断对象所属的类型。
4、多态的特点
(1)成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:
编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
运行时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,运行失败。
即:编译和运行都参考等号的左边。
将父类中的成员变量去掉后,编译和运行都出现错误。
(2)成员方法
编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。
运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。
即:编译看左边,运行看右边。
编译去掉父类方法:
但是运行的时候,执行的是子类方法:
标签:ceo 编程 继承 http sleep extend eof 图片 测试
原文地址:https://www.cnblogs.com/zhai1997/p/11284464.html