Implicit super constructor xx() is undefined for default constructor

因为父类定义了一个有参的构造函数,此时编译器就不会调用默认的无参构造函数。

当子类继承时,必须在自己的构造函数显式调用父类的构造函数,才能确保子类在初始化前父类会被实例化。

如果你父类中有无参的构造函数,子类就不会强制要求调用,编译器会默认帮你调用父类的构造函数。

父类

class Person {

    protected String name;

    protected int age;

    //你已经定义了自己的构造函数,此时编译器不会为你创建默认的构造函数

    public Person(String name,int age) {

        this.name=name;

        this.age=age;

    }

    public void print() {

        System.out.println("Name:"+name+"/nAge:"+age);

    }

}

子类

class Student extends Person {

    public Student(){      //子类构造函数

    //super();   不行,因为你的父类没有无参的构造函数

 

    super("a",1);

      //显示调用父类的构造函数,而且必须是第一行调用

    }

}

    class Test {

        public static void main(String args[]){

        }

}

时间: 2024-10-13 12:45:48

Implicit super constructor xx() is undefined for default constructor的相关文章

Implicit super constructor Object() is undefined for default constructor. Must define an explicit c

Eclipse错误 Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor 解决方案:把Java的类库加载进去,在工程上右键选择属性->JavaBuild Path的Libraries->Add Library选择JRE System Library->点击Next->选择Execution environment并选择

Error:Implicit super constructor People() is undefined for default constructor. Must define an explicit constructor

当子类继承父类的时候,若父类没有定义带参的构造方法,则子类可以继承父类的默认构造方法 当父类中定义了带参的构造方法,子类必须显式的调用父类的构造方法 若此时,子类还想调用父类的默认构造方法,必须在父类中明确声明默认的构造方法 1 package com.gaohui; 2 3 public class Test { 4 public static void main(String [] args){ 5 Man man = new Man(24,"Tom"); 6 man.eat();

C++对象模型——Default Constructor的建构操作(第二章)

第2章    构造函数语意学 (The Semantics of Constructor) 关于C++,最常听到的一个抱怨就是,编译器背着程序员做了太多事情.Conversion运算符就是最常被引用的一个例子. 2.1    Default Constructor的建构操作 C++ Annotated Reference Manual(ARM)指出"default constructors ...在需要的时候被编译器产生出来".关键字眼是"在需要的时候".被谁需要?

深度探索C++对象模型-----编译器’何时‘自动合成nontrivial default constructor

有4种情况,会造成"编译器必须为 未申明constructor的classes合成default constructor. 1.带有default constructor的member class object 如果一个class没有任何constructor,但是内含一个member object ,而后者有default constructor,那么这个class的implicit default constructor就是 nontrivial,编译器需要为改class合成出一个defau

2.1 Default Constructor的建构操作

1.   存在错误的程序例子 class Foo { public:  int m_nVal;  Foo *m_pNext; }; void Foo_Bar( void ) {  Foo bar;    if ( bar.m_nVal || bar.m_pNext )  {   int i;   i++;  } } (1)正确的程序语意是要求 Foo 有一个 default constructor,可以将 members 初始化为0. (2)上述代码不会合成一个 default construc

深入探索C++对象模型->2.1 Default Constructor的构造操作

一.对于class X,有四种情况,会造成“编译器必须为未声明constructor的classes合成一个default constructor或者扩充user-constructor”,对于其它情况,编译器什么也不做,如果程序需要,那是程序员的责任. 1.带有Default Constructor的Member Class Object:“如果class A内含一个或一个以上的member class objects,那么编译器会为没有构造函数的类添加构造函数来调用每一个member cla

Default Constructor的构建操作

在<C++ Annotated Reference Manual(ARM)[ELLIS90]>中的Section 12.1告诉我们:"Default constructors...在需要的时候被编译器产生出来". 其实默认构造函数也是分为两类的:有用的(nontrivial ).无用的(trivial ). 所谓有用的标准也是就默认构造函数会为我们的类做一些初始化操作.那么无用的就不会做任何工作,从而对我们的类也就没有任何意义. 所以,我们通常所说的默认构造函数是指有用的默

编译器会自动生成default constructor,这是真的吗?

相信很多人的回答都是"是的吧".Okay,是不是真的先不提了,先来看一个例子看看下面的代码能否编译通过,如果编译通过,能运行吗?如果不能运行,在哪出错? class foo { public: int val; foo *pNext; }; void Test1(){ foo f; if (f.val || f.pNext ){ cout << "in if" << endl; } } int main(){ Test1(); return

深度探索C++对象模型之第二章:构造函数语意学之Default constructor的构造操作

C++新手一般由两个常见的误解: 如果任何class没有定义默认构造函数(default constructor),编译器就会合成一个来. 编译器合成的的default constructor会显示的设定“class内每一个data member的默认值” 一.编译器在哪种情况下才会合成默认构造函数: 对于未声明构造函数的类,只有在以下四种情况下编译器才会为它们合成默认构造函数: 类的成员有一个类对象(Member Class Object),且该成员含有默认构造函数(default Const