构造器Constructor是否可被override?

2020-07-07 09:42发布

9条回答

不可以。构造函数不能是虚方法或者抽象方法也就不能被重写不可以构造方法是一种特殊的方法,它的作用在于初始化  类的时候对类的属性进行赋值, 该方法没有类型,并要求方法名与类名相同且不能有返回值,构造方法不能为虚方法或抽象方法所以一不能被重写。

小狮子
3楼-- · 2020-07-08 09:10

如果父类自定义了有参构造函数,则子类无论定义构造函数与否,定义有参构造函数与否,都会报错,正确的做法是在子类的构造方法中添上super(参数),以表明子类构造之前先构造父类,而这句话必须放在第一句,否则报"Constructor call must be the first statement in a constructor"的错误。
类的加载顺序:
首先执行 父类的静态代码块/初始化静态变量(两者优先级相同),然后执行子类的静态代码/初始化静态变量(两者优先级相同,谁写在前面谁先执行),然后初始化父类成员变量/执行代码块{}(两者优先级相同),接着父类的构造器,然后子类的成员变量/代码块,最后子类的构造器。

Ross
4楼-- · 2020-07-08 09:10

构造方法的主要目的是给类里面的字段进行初始化,并开辟内存,override用在虚方法和抽象方法的多态上,子类重写后会调用子类重写后的方法,父类的方法就不再调用,假如把override用在构造方法前,子类重写构造方法后,父类的构造方法就不会执行,刚父类里面的字段在内存中就不能开辟空间,也就没有办法给父类里面的字段赋初始值了,所以构造方法前面是不能加override的.

蜗牛
5楼-- · 2020-07-08 09:25

不可以,类的构造方法主要是为了,初始化时候给类中字段赋值或者实例化对象开辟空间的,

子类不能获得父类的构造器,子类可以通过关键字base调用父类的构造器来进行初始化。
重写是指子类和父类有相同的方法,既然子类不能继承父类的构造器,因此也就不存在重写。
子类继承父类的成员如下:非private成员变量和方法,不包括构造器。


Constructor不能被继承,所以Constructor也就不能被override。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。

Mantra
7楼-- · 2020-07-08 15:20

语法层次上肯定是不可以的,而且从实际使用的角度来说,也没有这个必要呀。

如果你想实现多种形式,直接通过构造方法重载即可实现。

子类的构造方法中可以调用父类的构造方法,通过使用base.即可。

梅向南
8楼-- · 2020-07-08 17:53

重载构造方法是可以的。但是重写则不可以,因为被重写的前提是被继承,而构造方法根本就不能被继承,所以谈不上被重写。


老杜
9楼-- · 2020-07-09 15:53

不可以啊。