我有一个名为Line的非常复杂的类,以及一个扩展的类ColouredLine,它只是为它添加了一种颜色。
如何在构造函数中从Line创建ColouredLine?
这是我的代码(不起作用......)
private class ColouredLine extends Line {
private Color color;
public ColouredLine(Line line, Color color) {
this = (ColouredLine)line;
this.color = color;
}
}
谢谢!
答案 0 :(得分:4)
您需要Line类中的复制构造函数:
public class Line
{
...
public Line (Line line)
{
// copy properties of line
this.something = line.something ...
}
...
}
然后在ColouredLine
的构造函数中,调用Line
的复制构造函数:
private class ColouredLine extends Line {
private Color color;
public ColouredLine(Line line, Color color) {
super (line);
this.color = color;
}
}
答案 1 :(得分:0)
使用委托模型。无需修改基线类。
private class ColouredLine extends Line {
private Color color;
private final Line line;
public ColouredLine(Line line, Color color) {
this.line = line;
this.color = color;
}
/**
* Delegates Line methods to the line object
**/
@Override
public int getProperty1() {
return line.getProperty1();
}
/**
* Specific ColouredLine methods
**/
public Color getColor() {
return color;
}
}
答案 2 :(得分:0)
'this'关键字的使用不当:
'this'只能以下列两种方式之一使用:
public void change(int age) {
String name = "Tom";
this.age = age;
this.name = name;
}
public class Rectangle {
private int x, y;
private int width, height;
public Rectangle() {
this(0, 0, 1, 1);
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
...
}
'this'永远不能单独使用,也不能从超类中调用构造函数。
而是使用Super()关键字来调用修改后的超级构造函数。在这样做之前,你必须修改超类构造函数以在其参数中获取Line对象,如下所示
public Line (Line line)
在子类构造函数的第一行,只需调用超级构造函数:
super(line);
请注意,如果不定义新的构造函数,则始终会在其所有子类中调用默认构造函数public Line()。