您的位置:首页 > 编程语言 > Java开发

java向上转型和向下转型

2017-07-05 13:53 295 查看

java向上转型和向下转型

一、概念

对于java这个面向对象的语言来说,向上转型和向下转型用到的还是挺多的,先根据我自己的理解说一下两者的概念:

很好理解,从类的继承关系来说,父类为上,子类为下,所以向上转型就是从子类型转换成父类型,而想下转型就是从父类型转化成子类型。

二、例子

下面通过一个小例子来更加直观的体会下:

public class UpcastingAndDowncasting {
public static void main(String[] args){
//向上转型--成功
Person p1 = new Student();
p1.say();

//向下转型--成功
Person p2 = new Student();
Student s1 = (Student)p2;
s1.say();
s1.study();

//向下转型--失败
/*Person p3 = new Person();
Student s2 = (Student)p3;
s2.say();
s2.study();*/

}
}
class Person{
public void say(){
System.out.println("Person say");
}
}
class Student extends Person{
@Override
public void say(){
System.out.println("Student say");
}
public void study(){
System.out.println("Student study");
}
}


三、分析

1、向上转型:

根据上面的例子很容易看出向上转型一般不会存在很大的问题,用的就是面向对象的多态特性,父类引用指向子类对象,如果父类引用想调用子类对象中特有的方法编译时不会通过的。

2、向下转型

(1)可以正常使用的情况:

可以看到向下转型存在两种形式,可以正常使用的依然用到了多态,父类引用指向子类对象,再将父类引用指向的对象强制类型转换为子类并赋值给子类引用,因为本来就是子类对象,最后用的时候还是子类对象,所以不会有问题。

(2)不能正常使用的情况

如果实例化的时候就是让父类对象指向了父类变量,再将父类引用指向的对象强制类型转换为子类并赋值给子类引用,就会出现问题了,虽然编译阶段不会报错但是运行会出错,因为实例化的就是父类对象,不包含子类的方法,所以调用子类特有方法的时候就会报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: