向上转型(父类引用指向子类对象)
Father f1 = new Son();
无需强制转换
向下转型
Son son=(Son)f1
需要强制转换
多态存在的三个必要条件
1,继承
父类 Perpson
子类 Man extends Person
子类 Women extends Person
2,重写
function dance(父类)
function dance(子类重写方法) Man
function dance(子类重写方法) Women
3,向上转型
Person p=new Man();
Person p1=new Women();
p.dance();
p1.dance();
分别执行自己的dance方法
意义:通过简单代码分析一下
public class Person {
public void eat(){
System.out.println("人会吃");
}
public void speak(){
System.out.println("人会说话");
}
}
public class Man extends Person {
public void eat(){
System.out.println("男人会吃");
}
}
public class Women extends Person{
public void eat(){
System.out.println("女人会吃");
}
public void baby(){
System.out.println("女人会生孩子");
}
}
public static void main(String[] args) {
//向上转型
//可以调用父类方法,子类重写方法,
//不能调用独有的方法(例如:Women的baby方法)
Person p=new Man();
p.eat();
p.speak();
Person p1=new Women();
p1.eat();
//向下转型(子类中有不同于父类的单独方法,向下转型就可以调用子类独有方法)
//向下转型必须转换为父类引用指向的真实子类类型
//不能是 Men w=(Men)p1;因为p1是women对象指向父类引用
Women w=(Women)p1;
w.baby();
}
由此可得:
向上转型的意义:就是实例化的时候可以根据不同的需求实例化不同的对象(women man),这也就是多态的意义。
向下转型的意义:父类引用可以使用子类的新增方法了。
这样一来,可以使用父类总结出来的方法,子类重写的方法,子类扩充的方法。