美文网首页
Java 构造函数不可以继承,因此不能被重写,但可以被重载

Java 构造函数不可以继承,因此不能被重写,但可以被重载

作者: 秋名山车神_f776 | 来源:发表于2018-04-09 09:59 被阅读0次

Constructors 是在一个类创建的时候,用户创建类实例的时候被调用的特殊函数。它不是一个类的成员函数,它只能代表这个类本身。

不可以创建一个继承的子类时,用父类的构造方法创建子类。

[java] view plain copy

<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_2" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" width="16" height="16" align="middle">

  1. <span style="font-size:18px;">public class main {

  2. public static void main (String[] arg){

  3. Son s = new Son (); // code 1

  4. }

  5. }

  6. class Father{

  7. public Father (){

  8. System.out.println("Father Construtor");

  9. }

  10. public Father (int x){

  11. System.out.println("Father Construtor " + x);

  12. }

  13. public void Father (){

  14. System.out.println("Father member function");

  15. }

  16. }

  17. class Son extends Father {

  18. public Son (){

  19. super(1);

  20. System.out.println("Son Construtor");

  21. }

  22. public void Father(){

  23. System.out.println("Inherited Father member function.");

  24. super.Father();

  25. }

  26. } </span>

如果在创建子类的时候,使用父类的构造方法,写成这样:

Son s = new Father ();

这时候,编译器会报“Type mismatch: cannot convert from Father to Son” 错误。

如果我们进行强制转换,如下:

Son s = (Son)new Father ();

这时候,编译器无法发现有什么错误,但是运行的时候会抛出下面异常。

Exception in thread "main" java.lang.ClassCastException: Father cannot be cast to Son at main.main(main.java:4)

父类无法转换成子类。其本质上,创建的仍是一个父类。

如果在Son类中,增加父类constructor的函数。

[java] view plain copy

<embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_3" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent" width="16" height="16" align="middle">

  1. <span style="font-size:18px;">public Father (){

  2. }</span>

去尝试重载父类constructor,编译器会报错。

所以,编译器如果要构造一个类,必须要有和类名字相同的构造函数才可以。

也就是说,构造函数是用来造唯一的东西的。不能用一个构造函数即造爸爸,又造儿子。这样身份就乱了。

相关文章

网友评论

      本文标题:Java 构造函数不可以继承,因此不能被重写,但可以被重载

      本文链接:https://www.haomeiwen.com/subject/ffmbhftx.html