子类构造函数会默认调用父类无参构造函数

1.调用父类无参构造函数是默认的!

子类的构造方法默认都去访问了父类的无参构造方法:在子类中的构造方法后都有一行默认语句 base()


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class Fu

{   public Fu()

    {

        Console.WriteLine("fu");

    }

}

class Zi : Fu

{

    public Zi()

        : base()//不管是否显式调用,控制台都会输出fu

    {

        Console.WriteLine("zi");

    }

}

Zi z = new Zi();

先执行父类的构造函数把父类初始化完成,再初始化子类的。

2.如何访问父类的有参构造函数?

可以通过super(参数)去访问父类中的有参构造函数。可以通过this(参数...)去访问本类中的其他构造函数。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

class Fu

    public Fu(int a)

    {

        Console.WriteLine("fu"+a);

    }

}

class Zi : Fu

    public Zi():base(0)//调用父类有参构造函数

    {

        Console.WriteLine("zi");

    }

    public Zi(int a):base(a)

    {

        Console.WriteLine("zi"+a);

    }

}

如果定义了构造函数,则类就不会有默认的无参构造函数;如果父类中没有默认的,则子类构造函数必须显示调用父类的构造函数

时间: 2024-11-10 13:54:51

子类构造函数会默认调用父类无参构造函数的相关文章

要养成良好的编程习惯:就是要加上默认的父类无参的构造方法

Super()表示调用父类的构造方法. Super()也和this一样必须放在第一行. This()用于调用本类的构造方法. 如果没有定义构造方法,那么就会调用父类的无参构造方法,即super(). 要养成良好的编程习惯:就是要加上默认的父类无参的构造方法. 思考:可是如果我们没有定义无参的构造方法,而在程序中构造了有参的构造方法,那么如果方法中没有参数,那么系统还会调用有参的构造方法么?应该不会. 1 package TomText; 2 3 public class TomText_18 {

java创建一个子类对象是会调用父类的构造方法会不会创建父类

1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法.这个地方我说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法(红色部分为方法名),初始化方法是由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如p

为什么在新建子类时要先调用父类的构造器

子类构造器会默认调用 父类的无参构造器,如果父类没有无参构造器,则需在子类构造器的第一行显式地调用父类的其他构造器. 其次,从继承的思想来看,你继承一个类,就相当于扩展一个类,形成一个更为特殊的类,但经常,我们需要将子类向上转型为基类,以便使用或达到其他各种目的. 这时,如果你生成子类对象时没有调用父类的构造器,那么,我们在使用父类的一些成员变量的时候,就会报变量未初始化的错误.请记住,变量初始化总是在构造器调用之前完成! 构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量.子类拥有父

子类构造函数是否会默认调用父类的无参构造函数

1 package test; 2 3 public class TestB { 4 5 public TestB() { 6 System.out.println("TestB的无参构造函数..."); 7 } 8 9 } 1 package test; 2 3 public class TestA extends TestB { 4 5 public TestA(int i) { 6 System.out.println(i); 7 } 8 9 public static void

No default constructor for entity Java无参构造函数

异常 org.hibernate.InstantiationException: No default constructor for entity 当查询的时候返回的实体类是一个对象实例,是hibernate动态通过反射生成的 反射的Class.forName("className").newInstance();需要对应的类提供一个无参构造函数, 出现这种问题是一般都是实体类有一个有参的构造 ,没有无参构造, 下面说一下有参构造 和无参构造 1,每一个类在默认情况下,都会有一个无参

C++类到底存不存在缺省无参构造函数

学习C++的时候有个问题老是忘,就是缺省无参构造函数,说的是定义类的时候,如果类本身没有构造函数,则调用一个缺省的无参构造函数,如果有构造函数,则就一定要按照构造函数的方式调用,这意味着如果定义了一个有参数的构造函数,那么在定义类的时候就一定要调用有参的那个构造函数,缺省的无参构造函数就不存在了. 说实话,当时学的时候感觉有点不可思议,但还是稀里糊涂的接受了,很多教材也是这样写的,但是真是这样吗,最近折腾llvm,它的IR对编译器动作表示的比较清晰,特意反汇编了一把看看,代码如下: #inclu

c#之有参和无参构造函数,扩展方法

例如在程序中创建 Parent类和Test类,在Test有三个构造函数,parent类继承Test类,那么我们可以在Test类自身中添加 扩展 方法吗? 答案:是不可以的.因为扩展方法必须是静态的,且静态方法是不存在构造函数的. 先看一段代码: public class Test { public Test() { Console.WriteLine("这是无参的构造函数"); } public Test(string name) { Console.WriteLine(string.

mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储

存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的存储过程,我写了一个比较简单的,需要注意的是Oracle无参存储过程不能写括号 [sql] view plain copy CREATE OR REPLACE Procedure cascadeoperation As Begin Delete From teacher Where id=1; Up

MyEclipse快速生成setter、getter、toString()、有参构造函数、无参构造函数

简单来说举一反三!!! 首先将鼠标移动到属性,点击右键如下图所示: 找到Source然后点击generate getters and setters.(同理toString().有参构造函数.无参构造函数点击Source中对应的选项即可) 选择select all.然后eclipse就自动生成效果图如下:(同理toString().有参构造函数.无参构造函数) 认真看过此篇的小伙伴,如果对你有收获,请点击旁边的小手推荐一下,如果有误,欢迎指正,谢谢! 版权声明:此篇为本人原创,转载请标明出处:h