如何在Java中为现有对象添加方法?

时间:2017-07-20 23:28:48

标签: java inheritance

我正在使用Processing库来用Java构建我的项目。我使用一个函数返回一个travis.yml类型的对象(我无权访问源代码)。

我需要创建Shape类型的对象(我设计的类扩展PShape)。

我该怎么做?

基本上我有:

PShape

PShape pShape = loadShape(filename); 是一个函数,我无法访问源代码。

我想以某种方式做:

loadShape

然后

class Shape extends PShape {...}

但是一旦Shape shape = (Shape) loadShape(filename); 给我loadShape()而不是PShape

,它就行不通

如何让Shape返回loadShape

谢谢

1 个答案:

答案 0 :(得分:5)

如果loadShape()返回PShape,则返回PShape。你不能让它返回PShape的子类。

最简单的方法是ShapePShape复制到新实例中: 例如

Shape myLoadShape(String filename)
{
    return new Shape(loadShape(filename));
    // Assumes you have a `Shape(PShape)` constructor.
}

或者Shape可能不是子类,但它包含PShape数据成员。

class Shape
{
    // No one picked up my C++ syntax goof ;-)
    protected PShape pshape;

    // Using a constructor is just one way to do it.
    // A factory pattern may work or even just empty constructor and a
    // load() method.
    public Shape(String filename)
    {
        pshape = loadShape(filename);
        // Add any Shape specific setup
    }


}