【发布时间】:2021-03-05 03:09:37
【问题描述】:
对于继承实践作业,我有一个扩展矩形的类Square,以下是相关方法:
public class Square extends Rectangle {
private Point p;
private int sideLength;
public Square(Point p, int sideLength){
super(p);
this.sideLength = sideLength;
}
public String toString(){
return getClass().getName() + "\nCenter point: (" + p.getX() + ',' + p.getY() + ") \nSide Length: " + sideLength + " \nArea: " + this.getArea() + " \nPerimeter: " + this.getPerimeter();
}
}
还有一个 getArea() 和 getPerimeter() 方法,但它们都不会导致这个问题。 我有一个单独的课程来测试这个:
public class SquareTest {
public static void main(String[] args){
ArrayList<Square> squareList = new ArrayList<>();
Point p1 = new Point(1, 1);
Point p2 = new Point(1, 2);
Point p3 = new Point(4, 1);
Point p4 = new Point(2, 3);
Point p5 = new Point(5, 4);
Square one = new Square(p1, 1);
Square two = new Square(p2, 2);
Square three = new Square(p3, 4);
Square four = new Square(p4, 4);
Square five = new Square(p5,5);
squareList.add(one);
squareList.add(two);
squareList.add(three);
squareList.add(four);
squareList.add(five);
for (Square each : squareList){
System.out.println(each.toString());
System.out.println();
}
}
}
它应该做的是为五个正方形对象中的每一个打印出 toString() 结果,其中一个正方形看起来像这样:
Square
Center point: (1,1)
Side Length: 1
Area: 1
Perimeter: 1
但我得到以下运行时错误:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.awt.Point.getX()" because "this.p" is null
at Square.toString(Square.java:21)
at SquareTest.main(SquareTest.java:23)
当我清楚地实例化五个 Point 对象时,我很困惑为什么它认为 this.p 为空。有什么想法吗?
【问题讨论】:
-
你有没有试过单独为任何一个方块调用
toString()方法,看看它在循环之前是否仍然抛出这个错误? -
你在你的
Square.p中隐藏Rectangle.p。
标签: java inheritance nullpointerexception point