" If the parent has no constructor (Object does have one), the compiler will reject the program."



嗨,我正在阅读对象声明,并遇到语句

如果父母没有构造函数(对象确实有一个),则编译器将拒绝该程序。

有人知道这意味着什么吗?

这是胡说八道。没有构造函数就不可能在Java中上课。我认为您的意思是:如果父类中没有默认构造函数。

儿童类的构造函数将(作为第一个语句)调用父类的默认构造函数。如果不存在,您将必须添加一个带有参数的明确调用,以匹配所在的构造函数。

public class Parent{
  public Parent(String o){}
}
public class Child extends Parent{
  public Child(String o){}
}

不会编译。儿童构造函数将寻找父母的默认构造函数,该构造者不存在。(顺便说一句,孩子的构造函数是否具有参数都没关系)。

因此,您将明确需要致电父母构造函数:

public class Parent {
    public Parent(String o) {
    }
}
public class Child extends Parent {
    public Child(String o) {
    super(o);
    }
}

如果孩子只有一个默认的构造函数,那就是这样:

public class Child extends Parent {
    public Child() {
    super(null);
    }
}

注意:NULL也可以被任何有效(硬编码)字符串值所取代。

如果父母没有构造函数(对象确实有一个),则编译器将拒绝程序

我认为您的误解是基础是您思考 是构造函数是继承的。实际上,构造函数是不是Java中继承的。因此,请考虑以下示例:

public class A {
    public A(int i) { super(); ... }
}
public class B extends A {
    public B() { super(); ... }
}

A

  • 不继承Object
  • 的任何构造函数
  • 不明确声明一个no-args构造函数(即public A() {...})和
  • 没有默认的构造函数(因为它 dos 声明另一个构造函数)。

它有一个也只有一个构造函数: public A(int)

构造函数无需显式调用超类构造函数。但是很多人认为包括明确的电话是很好的风格。如果将其遗漏,Java编译器将插入对超类No-Args构造函数的隐式调用... ,如果不存在或不存在NO-ARGS构造函数或子类不可见,则会导致编译错误。

相关内容

最新更新