java - 继承 getter 和 toString() - java

标签 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() 方法。我正在尝试打印两点(开始和结束)。如您所见,结束很简单,但开始点是继承的,我知道我应该输入什么。我获得 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

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

最佳答案

恕我直言,这不是继承的好用法。您的案件不是继承的有效候选人。 只有符合 is-A 关系的类才是继承的良好候选者。

Line 不是Point,而是点的集合(在您的例子中,它是 being 和 end)。

因此,它是一个很好的组合候选者 (Has-A)。

一行一个开始点和一个结束点。您同时使用继承(对于起点)和组合(对于终点)来重用代码。

坚持组合,Line类有两点(begin和end)。

关于java - 继承 getter 和 toString() - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31559666/

相关文章:

java - 错误 "maximum number of expressions in a list is 1000"的分区列表

java - ChromeDriver 在 headless 模式下运行时不处理 ssl 证书

iOS - 继承是如何工作的?

c++ - 显式类型标识符与 RTTI

javascript将带前导零的数字转换为字符串它将十进制数更改为八进制数

Java - 基于旧字符串和滞后创建新字符串

javascript - 如何访问从子类型调用的父类(super class)型中的js事件对象?

java - 在 Java 中将十进制( double )值 < 0.001 转换为字符串

java - 接受输入,检查它是否是整数并将其放入字符串中

java - x509认证失败时重定向循环