Java构造器(构造方法)能否可以被重写
作者:pangpd
1. 前言
首先,构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。
又由于构造器不能继承,所以就不能被重写。
但是,在同一个类中,构造器是可以被重载的。
其实,在之前的一篇博客中,我已经记录了重载和重写的区别
这里我们再重复一下。
2. 方法重载(Overloading)
重载遵循 两同一不同
(1)方法在同一个类中;
(2)方法的名字相同;
(3)参数不同(个数、类型、顺序至少有一个不一样);
(4)返回类型可以相同也可以不同。
因此,每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
3. 方法的重写(Override)
重写发生在继承关系中,当一个子类继承一父类,父类的某一个方法不再满足子类的具体特征,此时需要重新定义子类中定义的该方法。
需要满足一下条件
1.参数列表(方法的名称,参数个数、类型)必须完全与被重写方法的相同;
2.返回类型必须完全与被重写方法的返回类型相同;
3.子类重写父类的函数的时候,函数的访问权限必须大于等于父类的函数的访问权限;(不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。)
4.父类的成员方法只能被它的子类重写。
5.声明为final的方法不能被重写。
6.声明为static的方法不能被重写,但是能够被再次声明。
7.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
8.子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
9.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
10.构造方法不能被重写。
11.如果不能继承一个方法,则不能重写这个方法。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。