Line类的Getter方法

时间:2014-09-15 18:52:42

标签: java

我有两个班级:Point班级和LineSub extends Point

这是第一个类的构造函数 第一堂课也有私人诉讼的getterssetters

    private int x;
    private int y;

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

这是第二节课:

public class LineSub extends Point {

    Point end;  // It has only the end instance variable.
    public LineSub(Point begin, Point end) {
       super(begin.getX(), begin.getY());
       this.end = end;
    }
}

问题:是否可以编写一个返回起点的getBegin()方法?

7 个答案:

答案 0 :(得分:3)

可以编写一个getter方法,它会为起始点(来自Point类)返回Point,但这不是一个好的设计。

我要做的是重新考虑你的设计。是LineSub一个Point吗?不,LineSub由2 Point s组成,即开始和结束。

我将创建一个Point类,而不是使用两个成员变量扩展Line,而不是子类化Point。每个变量都是Point。< / p>

public class Line {
    private Point begin;
    private Point end;

    public Line(Point begin, Point end) {
       this.begin = begin;
       this.end = end;
    }
}

然后你可以编写两个getter方法,每个方法用于Point个。

答案 1 :(得分:1)

public Point getBegin() {
return new Point(super.getX(), super.getY());
}

答案 2 :(得分:1)

排序。它包含的只是这个

public Point getBegin(){
    return this;
}

您的LineSub方法不仅仅引用了开始Point。这是开始Point

由于您继承自Point,所有公共方法都是可供任何参考您实现的人访问的字段,并且由于您实现它的方式,该引用是您认为的起点。

请注意,这几乎肯定是实现此方法的错误方法,而this answer可能就是您应该使用的方法。我会留下这个答案,因为它不需要改变你的课程实现。

答案 3 :(得分:1)

您的代码应如下所示......

public class LineSub {
    Point begin;
    Point end;
    public LineSub(Point begin, Point end) {
       this.end = end;
       this.begin = begin;
    }
}

正如所指出的,你不需要退出它。

答案 4 :(得分:0)

回答你的问题,是的;虽然有多种方式:

public Point getBegin() {
    return new Point(super.getX(), super.getY());
}

另一种方法是在班级中维护begin个实例:

Point end;
Point begin;

public LineSub(Point begin, Point end) {
    this.begin = begin;
    this.end = end;
}

public Point getBegin() {
    return this.begin;
}

第二种方式,您会注意到,不需要继承。事实上,这让我想到了我的主要观点。这是一个非常奇怪的类层次结构,我会积极推荐它。 Line 组成两点;它不是本身两点。

答案 5 :(得分:0)

由于LineSub扩展Point并且实际上使用其超级来存储开始Point,您可以返回它:

public Point getBegin() {
    return this;
}

但是,如果Point是可变的,这可能是一个坏主意,因为它允许调用者修改LineSub的开头:myLineSub.getBegin().setX(123);。更安全的方法可能是重建对象:

 public Point getBegin() {
    return new Point(getX(), getY());
}

答案 6 :(得分:0)

是的,使用xy的吸气剂。

public Point getBegin() {
    return new Point(getX(), getY());
}

但是,让你的线类只包含两个点会不会更有意义吗?

例如:

public class Line {
    private Point begin;
    private Point end;

    public Line(Point begin, Point end) {
        this.begin = begin;
        this.end = end;
    }
}