1.多态性
同样的类型,调用同样的方法,根据子类对象的不同,产生不一样的状态
//父类的引用可以指向子类的对象
Person p = new Person();
p.walk();
Person p2 = new Student();
p2.walk();
Person p3 = new Worker();
p3.walk();
当编译的时候,按父类的类型调用,所以 就不能访问到子类的特有的属性和方法
运行的时候,实际是子类的对象可供的实现
2.多态的使用
比如在传参数的过程中,如果形参Person类型的参数
那么实参为Person以及Person的子类类型对象
public void method(Person p){
}
method(new Person());
method(new Student());
method(new Worker());
3.如果父类类型执行子类对象,那么就不能调用子类中特有的属性和方法
如何才能在多态中调用子类的特有的属性和方法?
可以通过强制类型转换:父类的类型可以任意转换子类的类型
Person p = new Student();
Student s = (Student)p;
s.study();
//注意:可能会产生类型转换异常(ClassCastException)
//Worker w = (Worker)p;
4.如何在转换过程中,没有类型转换异常呢?
可以在转换的时候,判断下,需要使用instanceof操作符
x instanceof A: 检验x是否为类A的对象,返回值为boolean型。
要求x所属的类与类A必须是子类和父类的关系
如:
Person p = new Student();
System.out.println(p instanceof Student);//true
System.out.println(p instanceof Worker);//false
5.对象的类型转换
对象自动类型转换(向上转型):子类的数据类型,可以直接给父类的数据类型.
如: Person p = new Student();
对象强制强制类型转换(向下转型,造型):把父类的数据类型给子类的数据类型,需要使用强制转换符"()"
如:Student s = (Student)p;
从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过造型(强制类型转换)实现
无继承关系的引用类型间的转换是非法的
java多态性
最新推荐文章于 2024-07-10 21:37:49 发布