多态性分为对象方法的多态和对象类型的多态:
对象方法的多态:方法的重在与重写
对象类型的多态;在Java中,对象类型的多态可以分为向上转型和乡下转型。向上转型是程序自动完成的,而乡下转型必须明确指出要转型的子类类型,这是强制的。
向上转型:
格式:父类 父类对象名=new 子类();
其中,“new 子类()”表示的是子类的实例。
<strong> </strong>class Person{
public void tell(){
System.out.println("父类Person的tell()方法");
}
}
class Student extends Person(){
public void tell(){
System.out.println("子类Student的tell()方法");
}
public void print(){
System.out.println("子类Student的print");
}
}
public class UpcastingDemo1{
public static void main(String[] args){
Person per=new Student();//子类Student向上转型为父类Person
per.tell(); //转型后可以访问子类重写父类的tell()方法
per.print(); //错误,不能访问子类新增的print()方法
}
}<strong>
</strong>
输出结果:子类Student的tell()方法
上面程序中,Person per=new Student()将子类Student创建的对象向上转型为父类Person类型,然后在调用子类Student重写父类Person父类的tell()方法。
就是说,父类调用子类的方法,但是向上转型的对象不能调用子类新增的方法,否则在编译时会出错。
总结:通过向上转型,父类对象可以调用子类重写的方法,但是不能调用子类新增的方法。