【问题标题】:Inheritance in Java, accessing child methods and using an array of parent classJava中的继承,访问子方法和使用父类数组
【发布时间】:2014-11-20 15:42:26
【问题描述】:

我有一个由一个名为 Piece 的类组成的 java 程序,它有四个子对象。 IE, 几何,圆扩展几何,circle2扩展圆等。

我想创建一个 Geometry 对象数组并访问 circle 或 circle2 方法。

例如。 Geometry[i].method1();

但是,我似乎无法做到这一点。是否有最佳实践来制作具有相同父对象的对象数组,并以这种方式访问​​其子对象的方法?

【问题讨论】:

    标签: java oop object inheritance


    【解决方案1】:

    您不能在父类对象上调用子类方法。这样想吧。圆形是一种几何形状。但并非所有几何形状都是圆形。因此,并非所有几何形状都可以具有圆形属性(在本例中是方法)。

    您要做的就是告诉编译器将Geometry 对象视为一个圆或父类Geometry 下的任何其他子类Object。这称为 "casting"

    所以基本上你将Geometry 对象转换为Circle 对象,如下所示:

    ((Circle) Geometry[i]).method1();

    【讨论】:

    • 谢谢。只是一个简单的问题,一组几何对象可以让我在其中制作子对象没问题,对吧?有人告诉我,数组大小是在启动时分配的,所以不会有空间容纳大小不同的子对象。
    • 我不太明白这个问题。但是,如果您要问是否可以将 Geometry 类的任何子类添加到数组中,那么可以。但是,当您尝试访问它时,您将得到一个几何对象,而不是一个圆。所以如果你想调用那个对象的某个方法,你必须知道它是什么类型。
    • 现在,如果您正在谈论可以在数组中存储多少项目。那么是的数组有固定的大小。因此,如果您在大小为 10 的数组中有 10 个项目,并且您想再存储一个,那么您有 2 个选项。 1)将数组复制到更大的数组中。 2) 使用 ArrayList
    • 我的意思更具体地说,如果数组是几何对象,而圆形对象在内存中占用更多空间,java 是否只是为孩子分配了足够的空间,还是在我分配一个圆圈时它在内存中发生了变化?
    • 这超出了您的问题范围。简单地说,存储在数组中的每个对象的大小不会影响数组的功能。唯一的 size 属性是你想要存储的元素的数量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2012-07-04
    相关资源
    最近更新 更多