JAVA对象 向上转型upcasting,向下转型downcasting

时间:2023-11-28 08:55:26

1:向上转型

  向上转型,就是java多态中的父类引用指向子类对象。但要注意的是 父类引用不可以访问子类新增加的成员(属性和方法)

  代码举例:

/**
* 定义一个父类
*/
public class Anaimal{
private Long height;
public Long getHeight() {
return height;
}
public void setHeight(Long height) {
this.height = height;
} }
/**
* 下面的main方法可测 父类的引用指向子类的对象
* 向上转型 也就是多态
*/
public class Dog extends Anaimal{
private Long dogHeight;
public Long getDogHeight() {
return dogHeight;
}
public void setDogHeight(Long dogHeight) {
this.dogHeight = dogHeight;
}
public static void main(String[] args) {
//父类引用指向子类对象
Anaimal anaimal = new Dog();
//只能访问父类的getHeight方法 不能访问子类的getDogHeight 因为Dog是当做anaimal用的
anaimal.getHeight();
}
}

以上 main()方法中 虽然anaimal是指向Dog()的引用,但是anaimal是当做Anaimal用的 所以看不到Dog独有的那部分

2.向下转型

向下转型就是平时代码中的强转

    public static void main(String[] args) {
//父类引用指向子类对象
Anaimal an = new Dog();
//只能访问父类的getHeight方法 不能访问子类的getDogHeight 因为Dog是当做anaimal用的
an.getHeight();
//如果想访问Dog独有的方法,可以把 an向下转型成Dog
//TODO 注意 如果是Anaimal an = new Anaimal(); an是转不成Dog的
Dog an2 = (Dog)an;
an2.getDogHeight();
}

代码TODO 已经说明,使用向下转型的前提,是当前引用 指向的就是所需转型子类的对象。

否则会报错:java.lang.ClassCastException