如何在主类中调用继承父类的扩展类内的自定义方法
问题原因及解决方案
你遇到的是Java面向对象中向上转型后无法调用子类独有方法的典型问题,原因如下:
- 你的代码中把
customRectangles子类实例赋值给了编译时类型为Rectangle父类的变量rectangle - Java编译器在编译阶段只会校验变量声明类型(也就是
Rectangle)中是否存在调用的方法,而Rectangle类本身没有定义getObject()方法,因此编译直接报错,无法运行。
方案1:直接用子类类型声明变量(最推荐,无额外开销)
不需要做向上转型,直接用自定义子类类型声明变量,就能直接调用子类定义的所有方法:
@Override public void start(Stage arg0) throws Exception { // 直接声明为customRectangles类型 customRectangles rectangle = new customRectangles(5); int i = rectangle.getObject(); System.out.println(i); }
方案2:强制向下转型(适用于必须用父类声明的多态场景)
如果业务要求必须用Rectangle作为变量声明类型,调用时需要先强转为子类类型再调用方法,建议增加类型校验避免转换异常:
@Override public void start(Stage arg0) throws Exception { Rectangle rectangle = new customRectangles(5); // 先判断实际类型,避免类型转换异常 if (rectangle instanceof customRectangles) { int i = ((customRectangles) rectangle).getObject(); System.out.println(i); } }
内容的提问来源于stack exchange,提问作者Pankaj-Talesara
相关产品推荐
相关产品推荐

