我需要知道调用构造函数的顺序。
点类:
public class Point
{
public int x = 0;
public int y = 0;
// a constructor!
public Point(int a, int b) {
x = a;
y = b;
}
}
矩形类:
public class Rectangle
{
public int width = 0;
public int height = 0;
public Point origin;
// four constructors
public Rectangle() {
origin = new Point(0, 0);
}
public Rectangle(Point p) {
origin = p;
}
public Rectangle(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// a method for computing the area of the rectangle
public int getArea() {
return width * height;
}
}
创建对象的类:
public class CreateObjectDemo {
public static void main(String[] args) {
//Declare and create a point object
//and two rectangle objects.
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
System.out.println("Width of rectOne: " + rectOne.width);
System.out.println("Height of rectOne: " + rectOne.height);
System.out.println("Area of rectOne: " + rectOne.getArea());
rectTwo.origin = originOne;
}
}
类Rectangle中的构造函数以哪种顺序调用?
何时会调用public Rectangle(Point p)
?
声明rectTwo.origin = originOne
做了什么?
该程序来自Oracle的Java Tutorial站点。
答案 0 :(得分:2)
此程序中调用的所有构造函数都按以下顺序完成:
Point(int x, int y)
Rectangle(Point p, int w, int h)
Rectangle(int w, int h)
Point(int x, int y) // (called by Rectangle)
rectTwo
的“origin”等于originOne
所代表的原点答案 1 :(得分:2)
构造函数调用:
Point(int,int)
矩形(Point,int,int)
Rectangle(int,int)
Point(int,int)
永远不会调用Rectangle(Point)。
该声明将rectTwo
的来源设为originOne
。
答案 2 :(得分:1)
1。)每个2实例化只调用一个构造函数。基于main
方法的订单:
public Rectangle(Point p, int w, int h)
public Rectangle(int w, int h)
2。)从不。
3.。)将origin
对象的rectTwo
字段更改为originOne
,以便Point
rectTwo.origin
现在(23,94)而不是(0.0)。
答案 3 :(得分:1)
通常,控制流程按程序顺序(即从左到右),但以下情况除外:
因此我们有以下顺序:
Point originOne = new Point(23, 94);
- 这将调用Point
构造函数。Rectangle rectOne = new Rectangle(originOne, 100, 200);
- 这将使用Point和两个Rectangle
参数调用int
构造函数。 Rectangle rectTwo = new Rectangle(50, 100);
- 这将使用两个Rectangle
参数调用int
构造函数。
origin = new Point(0, 0);
中调用Point
构造函数。没有更明确的构造函数调用。但是这些调用中的每一个都包括在开始时对其超类的构造函数(这里是Object
)的隐式调用。
似乎没有调用构造函数Rectangle(Point)
。
rectTwo.origin = originOne;
将第二个矩形的原点从(0,0)更改为rectOne
使用的相同点,例如(23,94)。