我有两个班级:Point
班级和LineSub
extends
Point
这是第一个类的构造函数
第一堂课也有私人诉讼的getters
和setters
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()
方法?
答案 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)
是的,使用x
和y
的吸气剂。
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;
}
}