如何构造一个具有抽象类类型字段的对象?

Ori*_*ski 1 java abstract-class

所以,我们有一个类,其中一个字段是抽象类的类型.我们想编写一个构造函数,以便不会出现别名; 即我们不想引用构造函数获取的Color对象,而是复制它,并将副本分配给Color字段.

class Shape {
    private Color color; /* Color is an abstract class */

    public Shape(Color c) {
       /* How do we assign a clone
          of `c` into `color`? */
    }

    /* Methods */
    ...
}

abstract class Color {
    private String colorModel;
    private float transparency;

    /* Methods */
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们无法使用,color = c.clone()因为编译器发出以下错误:

  • "类型不匹配:无法从对象转换为颜色."
  • "Object类型的方法clone()不可见."

那么,这个问题的可能解决方案是什么?

zie*_*mer 5

  1. Color需要实施Cloneable.

  2. 根据CloneableJavadoc:

    按照惯例,实现此接口的类应使用公共方法覆盖Object.clone(受保护).有关重写此方法的详细信息,请参阅Object.clone().

  3. 你需要将结果c.clone()强制转换为Color(color = (Color)c.clone()) - 尽管你的重写clone()方法Color可以为你做到这一点.

使用Cloneable可能不是最好的方法(请参阅此处发布的其他答案) - 但这应该提供您所要求的.