我从书上看到说:如果超类没有无参的构造方法,子类又不明确地调用超类的构造方法,编辑器将无法编辑子类.能举个例子说明吗?

1个回答

  • 因为构造函数不能继承

    举个简单的例子

    父类

    Parent

    public class Parent{

    //

    }

    子类

    public class Child extends Parent{

    //

    }

    此时父类没有明确定义有参构造,只有一个默认的无参构造函数,则此时代码没有错误

    但是如果我们将父类代码换成

    public class Parent {

    x05public Parent(int i){};//定义有参构造函数

    }

    则子类的代码就会出现错误

    Implicit super constructor Parent() is undefined for default constructor.Must

    define an explicit constructor

    到这就可以看出书上说的内容是什么了

    为什么需要这样实现,其实这个是在实例化对象时让超类和子类间有着明确的关系作出的规定.其实想想也就知道了,如果超类未定义无参构造,则实例化超类时,必须有参;而实例化子类时,其实是先实例化超类,如果此时子类未明确引用超类构造函数,则你让编译器如何理解你实例化的子类该如何与超类建立明确的继承关系呢?也就是说父类说我必须有个参数才能实例化,你继承于我,你却不调用我的有参构造函数,难道你是想另起门户,继承个无参的父类么?

    最后必须强调的是构造函数不能继承

    千万别认为如果我在子类中写个

    public Child(int i){

    }

    就和父类一致了,代码就不会错了,这是错误的,其实关键就在于构造子类对象时,你必须先明确子类的老爸到底是谁.