意外输出NULL

时间:2014-03-28 15:54:59

标签: java inheritance polymorphism

我正在使用继承和多态。 我只获得此输出而不是显示所需的点。

但打印点单独工作正常。印刷线会产生问题。

输出: 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);

    }

}

2 个答案:

答案 0 :(得分:5)

您的构造函数重新分配本地引用p1p2,而不是分配实例变量。由于未分配实例变量,因此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明确地解决班级成员。