Abr*_*sef 5 java polymorphism inheritance casting
我试着用这种方式向下倾斜:
public static void main(String[] args){
Animal a = new Animal();
((Cat)a).makePee();
}
Run Code Online (Sandbox Code Playgroud)
Cat扩展Animal,两者都有相同的方法makePee().如果我尝试运行它,编译器会显示一条错误消息:
线程"main"中的异常java.lang.ClassCastException:Animal无法在Main.main(Main.java:6)中强制转换为Cat
但是在App Lern的示例中,Java显示与我一样.
好吧,a不是一个实例Cat.如果你想将它向下转换为a Cat,你需要实际创建一个Cat(或者某个扩展的类的实例Cat):
Animal a = new Cat();
Run Code Online (Sandbox Code Playgroud)
但请注意,如果Animal声明makePee()并Cat覆盖它,则向下转换是没有意义的.您可以调用a.makePee(),并且Cat将使用实现(假设您实际创建了一个Cat,如上所述).