Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自父类的链构造函数_Java_Constructor_Constructor Chaining - Fatal编程技术网

Java 来自父类的链构造函数

Java 来自父类的链构造函数,java,constructor,constructor-chaining,Java,Constructor,Constructor Chaining,对于课堂作业,我有几节课 我对复合类和图片类有问题 它说复合类只有一个没有参数的构造函数 但它需要图片类中的链构造函数 这是我的综合课 public class Composite extends Picture { private ArrayList<Picture> components; public Composite (){ //I have no idea how to chain. } ... 对于链接,我的作业指导说 “合成图只是一

对于课堂作业,我有几节课

我对复合类和图片类有问题

它说复合类只有一个没有参数的构造函数

但它需要图片类中的链构造函数

这是我的综合课

public class Composite extends Picture {
    private ArrayList<Picture> components;

    public Composite (){
    //I have no idea how to chain.
    }
...
对于链接,我的作业指导说

“合成图只是一组照片的集合,所有照片都有自己的位置。因此,合成图必须有一个基点,但它实际上并不意味着什么。”

Composite将有一个没有参数的构造函数。但是,构造函数需要与Picture的构造函数链接,这需要一个点。将坐标为NaN和NaN的PicPoint传递给Picture构造函数

但我不知道如何链接构造函数

另外,这是测试类方法的一部分

    PicPoint p0 = new PicPoint(0,0);
    PicPoint p1 = new PicPoint(3,0);
    PicPoint p2 = new PicPoint(0,4);
    Triangle t1 = new Triangle(p0,p1,p2);
    Circle c1 = new Circle(p1, 2);
    Rectangle r1 = new Rectangle(p2, 3, 4);
    Composite cmp1 = new Composite();
    cmp1.getComponents().add(t1);
    cmp1.getComponents().add(c1);
    cmp1.getComponents().add(r1);


    PicPoint p3 = new PicPoint(17, 23);
    PicPoint p4 = new PicPoint(-14,-5);
    PicPoint p5 = new PicPoint(3, -18);
    Triangle t2 = new Triangle(p3,p4,p5);
    Circle c2 = new Circle(p4, 2);
    Rectangle r2 = new Rectangle(p5, 3, 4);
    cmp2 = new Composite();
    cmp2.getComponents().add(t2);
    cmp2.getComponents().add(c2);
    cmp2.getComponents().add(r2);
    cmp2.getComponents().add(cmp1);


/*I tried 
public Composite(){
    super(new PicPoint(0, 0));
}
and that test class gave me tons of nullPointException*/

构造函数链接背后的思想是,当一个子对象被实例化时,其构造函数会调用其父构造函数。了解这一点的一个好方法是,子构造函数只处理子构造函数特有的逻辑,而超级调用处理所有其他逻辑

根据我对问题的理解,Composite的构造函数应该如下所示:

public Composite() {
    super(new PicPoint(Double.NaN, Double.NaN)); //parent constructor call;
    // any other logic that is specific to the child class Composite
}
public Composite() {
    super(new PicPoint(Double.NaN, Double.NaN)); //parent constructor call;
    // any other logic that is specific to the child class Composite
}