public class CalC
{
void amethod()
{
System.out.println("CalC.amethod");
}
CalC()
{
amethod();
System.out.println("Hu?");
} /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
CalC cc = new CalChild();
cc.amethod(); }}class CalChild extends CalC
{
void amethod()
{
System.out.println("CalChild.amethod");
}
}output:
CalChild.amethod
Hu?
CalChild.amethod为什么CalC Constructor调用的不是自己的amethod()呢
{
void amethod()
{
System.out.println("CalC.amethod");
}
CalC()
{
amethod();
System.out.println("Hu?");
} /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
CalC cc = new CalChild();
cc.amethod(); }}class CalChild extends CalC
{
void amethod()
{
System.out.println("CalChild.amethod");
}
}output:
CalChild.amethod
Hu?
CalChild.amethod为什么CalC Constructor调用的不是自己的amethod()呢
{
amethod();
System.out.println("Hu?");
}
这是一个父类的构造方法,
当new 子类时,首先要对父类初始化!
所以调用顺序为
CalC()
{
amethod();
System.out.println("Hu?");
}
void amethod()
{
System.out.println("CalChild.amethod");
}
void amethod()方法了
CalC cc;
cc=new CalChild();这样看意思就明显了:先声明CalC 的引用cc,再将引用cc指向CalC的子类CalChild的实例上。于是当我们使用语句cc.amethod();时就会自然而然的调用子类的amethod()方法。
当然还要明确子类在构造时会先初始化父类的。
此程序前后两次打印都是一个原理。。