继承getter和toString() - java

时间:2015-07-22 09:50:42

标签: java inheritance tostring getter

我在Java中练习继承并且在子类中遇到了getter方法。 这是Point类:

package OOP.LinePoint;

public class Point {
    private int x;
    private int y;

    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }
     public String toString() {
          return "Point: (" + x + "," + y + ")";
       }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }

}

这里是LineSub类:

package OOP.LinePoint;

public class LineSub extends Point{
    Point end;

    public LineSub(int beginX, int beginY, int endX, int endY){
        super(beginX, beginY);
        this.end = new Point(endX, endY);
    }
    public LineSub(Point begin, Point end){
        super(begin.getX(),begin.getY());
        this.end = end;
    }
    @Override
    public String toString() {
        return "LineSub [begin=" + "(" + super.getX() +"," + super.getY() +") " + "end=" + end + "]";
    }
    public Point getEnd() {
        return end;
    }
    public void setEnd(Point end) {
        this.end = end;
    }

    public Point getBegin(){

    }
    public void setBegin(Point begin){
        setX(begin.getX());
        setY(begin.getY());
    }

}

我的问题:

1)toString()方法。我试图打印两个点(开始和结束)。你可以看到结束很容易但是开始Point是继承的,idk我应该键入什么。我得到x和y点的方式是有效的,但对我而言,这似乎是蹩脚的方式。肯定有更好的方法,你能帮我解决一下吗?

2)指向getBegin()方法。我试过了:

public Point getBegin(){
  return (Point)this;
 }//Not working(getting whole Point object)

public Point getBegin(){
  return new Point(getX(), getY());
 }//Very noob way

我没有其他想法,请借给我你的智慧。

2 个答案:

答案 0 :(得分:3)

恕我直言,这不是一个很好的继承。您的案例不是继承的有效候选人。 只有当符合is-A关系时,类才是继承的良好候选者。

Line不是Point,而是一系列积分(在您的情况下,它正在结束)。

所以,它是作曲的好候选人(Has-A)。

HAS一个开头和一个结束点。您正在使用继承(对于开始点)和组合(对于终点)来进行代码重用。

坚持写作,并在Line类中有两个点(开头和结尾)。

答案 1 :(得分:1)

要获得开始Point,您必须将自己投向Point。您可以致电super.toString访问父类的toString

    @Override
    public String toString() {
        return "LineSub [begin=" + super.toString() + "end=" + end.toString() + "]";
    }

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

您必须投射的事实表明您的层次结构错误。这种结构通常可以用两点来实现。

public class LineSub {

    Point begin;

    Point end;