我在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
我没有其他想法,请借给我你的智慧。
答案 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;