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">
<span style="font-size:18px;">public class main {
public static void main (String[] arg){
Son s = new Son (); // code 1
}
}
class Father{
public Father (){
System.out.println("Father Construtor");
}
public Father (int x){
System.out.println("Father Construtor " + x);
}
public void Father (){
System.out.println("Father member function");
}
}
class Son extends Father {
public Son (){
super(1);
System.out.println("Son Construtor");
}
public void Father(){
System.out.println("Inherited Father member function.");
super.Father();
}
} </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">
<span style="font-size:18px;">public Father (){
}</span>
去尝试重载父类constructor,编译器会报错。
所以,编译器如果要构造一个类,必须要有和类名字相同的构造函数才可以。
也就是说,构造函数是用来造唯一的东西的。不能用一个构造函数即造爸爸,又造儿子。这样身份就乱了。