我正在使用继承和多态。 我只获得此输出而不是显示所需的点。
但打印点单独工作正常。印刷线会产生问题。
输出: line join null null
package serial;
import java.io.*;
class Point
{
private int x,y;
Point(int x,int y)
{
this.x = x;
this.y = y;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
void setX(int x)
{
this.x = x;
}
void setY(int y)
{
this.y = y;
}
public String toString()
{
//String s = "Points joining line are ("+p1.getX()+","+p1.getY()+") and ("+p2.getX()+","+p2.getY()+")";
return "(" + x + "," + y + ")";
}
}
class Line
{
private Point p1, p2;
Line()
{
}
Line(Point p1, Point p2)
{
p1 = new Point(2,2);
p2 = new Point(3,3);
}
void setP1(Point p1)
{
p1.setX(2);
p1.setY(2);
}
Point getP1()
{
return p1;
}
void setP2(Point p2)
{
p2.setX(3);
p2.setY(3);
}
Point getP2()
{
return p2;
}
public String toString()
{
String str;
str = "line joining "+this.p1+" "+this.p2+"";
return str;
}
}
public class chumma {
public static void main(String args[])
{
Point p1 = new Point(2,2);
Point p2 = new Point(3,3);
Line l1 = new Line(p1,p2);
//l1.setP1(p1);
//l1.setP2(p2);
System.out.println(l1);
}
}
答案 0 :(得分:5)
您的构造函数重新分配本地引用p1
和p2
,而不是分配实例变量。由于未分配实例变量,因此Java为其提供了默认值null
。
添加this.
以引用实例变量。
Line(Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
}
您还需要在no-arg构造函数中为这些变量赋值。
答案 1 :(得分:0)
你的consturctor应该是这样的:
Line(Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
}
错误在于您没有分配成员变量,而是分配隐藏成员变量的参数。
使用this keyword明确地解决班级成员。