向下转型、子类对象实例化的理解

1、向下转型的使用:

(1)需要转型的原因:有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用。如果需要调用子类特有的属性或方法,则必须向下转型。

(2)如何转型(如何才能调用子类特有的属性和方法):向下转型,使用强制类型转换符。

注意:使用强转时,可能出现ClassCastException异常。

(3)向下转型的几个常见问题:

① 编译通过,运行不通过:

Person p1 = new Woman();

Man m1 = (Man)p1;

② 编译通过,运行也通过:

Object obj = new Woman();

Person p2 = (Person)obj;

③ 编译都不通过:

Man m2 = new Woman();

2、子类对象实例化全过程:

(1)从结果来看:子类继承父类以后,就获取了父类中声明的属性或方法。创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。

(2)从过程来看:当通过子类的构造器创建子类对象时,一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,直到调用了 java.lang.Object 类中空参的构造器为止。正因为加载过所有父类的结构,所以才可以看到内存中有父类的结构,子类对象才可以考虑进行调用。

注意:虽然创建子类对象时,调用了父类的构造器,但从始至终就创建过一个对象,即:new的子类对象。

posted @ 2022-06-22 15:27  萧若風  阅读(73)  评论(0)    收藏  举报