【发布时间】:2021-04-01 01:06:50
【问题描述】:
诚然,我对面向对象编程有点陌生,因此非常感谢您的帮助! 我有一个类“Gerade”(德语为直线)和一个类“Strahl”(德语为射线)。我想在子类“Strahl”中调用超类“Gerade”的构造函数。但现在我收到错误消息:'空白的最终字段 p1 [和 p2] 可能尚未初始化'。这是什么原因?我非常感谢任何答案。提前谢谢!
public class Gerade {
private final Punkt p1;
private final Punkt p2;
public Gerade(Punkt p1, Punkt p2)
{
if(p1.equals(p2)==true)
{
System.out.println("Die Eingabe ist ungueltig. Beide Punkte haben die selben Koordinaten.");
p1 = null;
p2 = null;
}
if(p1.getXkoord().equals(p2.getXkoord())==true)
{
if((p1.getYkoord().compareTo(p2.getYkoord()) < 0))
{
this.p1 = p1;
this.p2 = p2;
}
else
{
this.p1 = p2;
this.p2 = p1;
}
}
else if((p1.getXkoord().compareTo(p2.getXkoord()) > 0))
{
this.p2 = p1;
this.p1 = p2;
}
else
{
this.p1 = p1;
this.p2 = p2;
}
}
“Gerade”类使用“Punkt”类的某些属性和方法。坐标是 BigDecimals。以免您感到困惑。
public class Strahl extends Gerade
{
private final Punkt p1;
private final Punkt p2;
private final Punkt start;
public Strahl(Punkt a, Punkt b)
{
super(a, b);
this.start = a;
}
【问题讨论】:
-
我不会说德语,但您的第一次检查似乎试图阻止您两次通过同一点。与其打印一条消息(容易忽略)并清空字段(一旦使用它就使构造的实例无用),而是抛出异常
-
Smite - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。要mark an answer as accepted,您需要单击答案左侧的大复选标记 (✓)。 注意:您只能接受一个问题的答案。但是,一旦您拥有超过 15 个声望点,您就可以upvote 任意数量的答案。
标签: java constructor subclass super superclass