Как создать конструктор объекта из расширенного класса, который содержит в качестве аргументов два исходных объекта?

Я новичок в Java, и у меня есть простая проблема:

У меня есть следующий класс Point:

public class Point {

    private int yAxis;
    private int xAxis;

    public Point (int x, int y)
    {
        xAxis = x;
        yAxis = y;
    }
}

Я создал новый класс, расширяющий класс Point. Я хочу, чтобы мой новый класс принимал в качестве аргументов два объекта Point. Я написал следующий код, но получаю сообщение об ошибке «Неявный суперконструктор MyPoint() не определен. Должен явно вызывать другой конструктор». Как я могу решить проблему?

Заранее спасибо!

public class Rectangle extends Point {

    private int length1;
    private int height1;

    public Rectangle(int x, int y, int l, int h) {
        super(x, y);
        l = length1;
        h = height1;
    }

    public Rectangle(Point topLeft, Point bottonRight) {


    }
}

person voimak    schedule 03.01.2012    source источник
comment
И просто к вашему сведению: нет смысла присваивать значение поля значению параметра конструктора. Например, вы пишете: l = length1.   -  person Tom    schedule 03.01.2012
comment
Кроме того... более четкий способ задать ваш вопрос: Как создать подкласс, который зависит от его суперкласса?   -  person Tom    schedule 03.01.2012


Ответы (2)


Другие упомянули, что вы не должны использовать наследование. Я полностью согласен. Но я считаю, что «Эффективная Java» является таким хорошим справочником по подобным вопросам, что я думаю, что он достоин отдельного ответа. См. Эффективный Java-пункт 16. Предпочитайте композицию наследованию для более подробного обсуждения.

person Tom    schedule 03.01.2012
comment
Я тоже очень рекомендую прочитать всю книгу! - person Tom; 03.01.2012

Вы не должны использовать extends Point только потому, что класс Rectangle упоминает Points. Ключевое слово extends используется для объявления отношения is-a. Спросите себя, является ли прямоугольник точкой?

Если вы пытаетесь сказать: «Этот класс будет использовать класс Point», вам, вероятно, следует просто import класс Point.

(Вы исправите ошибку, удалив extends Point.)

person aioobe    schedule 03.01.2012
comment
Могу ли я решить проблему, не удаляя exteds Point? - person voimak; 03.01.2012
comment
Да (но это было бы глупо :) Поскольку Rectangle, то является Point, вам нужно предоставить Point-конструктору аргументы (x и y). Вы делаете это, добавляя, например, super(0, 0) в начало второго конструктора Rectangle. - person aioobe; 03.01.2012
comment
@voimak: вы также можете вызвать суперконструктор со свойствами x и y точки topLeft Point: super(topLeft.getX(), topLeft.getY()), но это только в том случае, если вы действительно хотите иметь возможность рассматривать прямоугольник как точку. - person Costi Ciudatu; 03.01.2012
comment
как насчет нижней правой точки, я должен сделать такой же super(bottomRight.getX(), bottomRight.getY())? Спасибо! - person voimak; 03.01.2012