Java понимание наследования: получатель и установщик из класса родителей - PullRequest
0 голосов
/ 10 апреля 2020

Java новичок снова. Я пытаюсь понять, как работает наследование, и я думаю, что вроде как получил его, но мой код не работает так, как я ожидал, и трудно выяснить причину.

Проблема заключается в моих методах получения и установки из класс родителей. Не похоже, что мой код вызывает их так, как я ожидал.

Вот мой родительский класс:

class MyPoint {
    public int x, y;

    MyPoint() {
        x = 0;
        y = 0;
    }

    MyPoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    MyPoint(MyPoint myPoint) {
        x = myPoint.x;
        y = myPoint.y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public void setX(int x) {
        if (x > 0) {
            this.x = x;
        }
    }

    public void setY(int y) {
        if (y > 0) {
            this.y = y;
        }
    }

    public String toString() {
        return "(" + x + ", " + y + ")";
    }
}

И дочерний класс:

class MySubLine extends MyPoint {
    int x, y, x1, y1;
    MyPoint endPoint;

    public MySubLine() {
        super();
        x1 = 0;
        y1 = 0;
    }

    public MySubLine(int x, int y, int x1, int y1) {
        super(x, y);
        this.x = x;
        this.y = y;
        this.x1 = x1;
        this.y1 = y1;
    }

    public MySubLine(MyPoint p1, MyPoint p2) {
        super(p1.x, p1.y);
        x = p1.x;
        y = p2.y;
        x1 = p2.x;
        y1 = p2.y;
    }

    public int getEndX() {
        return x1;
    }

    public int getEndY() {
        return y1;
    }

    public void setEndX(int x) {
        if (x > 0) {
            this.x1 = x;
        }
    }

    public void setEndY(int y) {
        if (y > 0) {
            this.y1 = y;
        }
    }

    public double getLength() {
        return Math.sqrt(Math.pow((x1 - x), 2) + Math.pow((y1 - y), 2));
    }

    public String toString() {
        return "(" + x + ", " + y + ") to (" + x1 + ", " + y1 + ")";
    }
}

И когда я пытаюсь запустить тестовый набор

MySubLine line = new MySubLine();
line.setX(40); line.setY(50);
System.out.println(line);

в моем основном файле Java, я получаю результат (0, 0) to (0, 0), а ожидаемый результат - (40, 50) to (0, 0).

Почему не запускаются мои методы установки?

Любая помощь будет оценена!

1 Ответ

3 голосов
/ 10 апреля 2020

Вы снова объявили x и y в своем подклассе, чтобы они перекрывали переменные с одинаковыми именами в суперклассе

line.setX(40)

Это вызовет метод в суперклассе и, таким образом, установит x в MyPoint

В подклассе

public String toString() {
    return "(" + x + ", " + y + ") to (" + x1 + ", " + y1 + ")";
}

это даст доступ к x и y в MySubLine, которые не были изменены.

Решение: удалите x и y как элементы экземпляра из MySubLine

...