站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题JAVA技术专题综述之构造方法篇

JAVA技术专题综述之构造方法篇

摘要: JAVA技术专题综述之构造方法篇
<iframe align=right frameBorder=0 height=300 marginHeight=0 marginWidth=0 scrolling=no src="http://www.chinabyte.com/tag/cont_flash_software.html" width=360></iframe>

  类的继承机制使得子类可以使用父类的功能(即代码),并且子类也具有父类的类型。下面介绍类在继承关系上的初始化的顺序问题。

  示例1:

<table bgColor=#ffffff border=0 cellPadding=0 cellSpacing=0 width=600> <tr> <td>class SuperClass
{
SuperClass()
{
System.out.println("SuperClass constructor");
}
}
public class SubClass extends SuperClass
{
SubClass()
{
System.out.println("SubClass constructor");
}
public static void main(String[] args)
{
SubClass sub = new SubClass();
}
}
输出结果: SuperClass
constructor
SubClass constructor </td></tr></table>
  在子类中只实例化了一个子类对象。从输出结果上看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。注意:程序自动调用其父类的默认构造方法。

  示例2:

<table bgColor=#ffffff border=0 cellPadding=0 cellSpacing=0 width=600> <tr> <td>class SuperClass
{
SuperClass(String str)
{
System.out.println("Super with a string.");
}
}
public class SubClass extends SuperClass
{
SubClass(String str)
{
System.out.println("Sub with a string.");
}
public static void main(String[] args)
{
SubClass sub = new SubClass("sub");
}
} </td></tr></table>
  在JDK下编译此程序不能成功。正如上例中说的:程序在初始化子类时先要寻找其父类的默认构造方法,结果没找到,那么编译自然不能通过。

  解决这个问题有两个办法:

  1.在父类中增加一个默认构造方法。
  2.在子类的构造方法中增加一条语句:super(str); 且必须在第一句。

  这两种方法都能使此程序通过编译,但就本程序来说运行结果却不相同。

  第1种方法的运行结果是:

  Sub with a string.

  第2种方法的运行结果是:

<table bgColor=#ffffff border=0 cellPadding=0 cellSpacing=0 width=600> <tr> <td>Super with a string.
Sub with a string. </td></tr></table>
  第2种解决方法实际上是指定编译器不要寻找父类的默认构造方法,而是去寻找带一个字符串为参数的构造方法。




↑返回目录
前一篇: Java模式设计之多态模式与多语言支持
后一篇: JAVA专题技术综述之线程篇