Я получил очень сложный класс под названием "Линия" и расширенный, ColouredLine, который просто добавляет к нему цвет.
Как создать ColouredLine из строки в конструкторе?
Вот мой код (который не работает...)
private class ColouredLine extends Line {
private Color color;
public ColouredLine(Line line, Color color) {
this = (ColouredLine)line;
this.color = color;
}
}
Благодаря !
Вам понадобится конструктор копирования в классе 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;
}
}
Используйте модель делегата. Не нужно изменять базовый класс Line.
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;
}
}
Неправильное использование ключевого слова "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() всегда будет вызываться во всех его подклассах.