}
}
输出结果:
Parent Vist
Parent Vist
---------------
Sub Vist
Sub Vist
Sub Vist
---------------
作者: 刘海源 时间: 2012-7-24 12:10
class Parent2 {
Parent2 ()
{
System.out.println("Parent Vist");
}
void vist()
{
System.out.println("Parent Vist");
}
}
class sun extends Parent2{
sun()
{
vist();
}
void vist()
{
System.out.println("Sub Vist");
}
public static void main(String[] args)
{
Parent2 parent = new Parent2();
parent.vist(); // 编译看左边,运行看右边 这里肯定调用的是父类的啦
System.out.println("---------------");
sun sub = new sun(); //这里调用的是子类的虽然子类的里边有一个隐是的super但是因为
//sun继承了Person2那么就复写了vist()方法
sub.vist();
System.out.println("---------------");
}
} 作者: 肖琦 时间: 2012-7-24 12:12
class Parent2
{
Parent2 ()
{
System.out.println(this.getClass().getName());
vist();
}
void vist()
{
System.out.println("Parent Vist");
}
}
public class SubConstructor extends Parent2
{
SubConstructor()
{
vist();
}
void vist()
{
System.out.println("Sub Vist");
}
public static void main(String[] args)
{
Parent2 parent = new Parent2();
parent.vist();
System.out.println("---------------");
SubConstructor sub = new SubConstructor();
sub.vist();
System.out.println("---------------");
}
}
复制代码
输出结果:
Parent2
Parent Vist
Parent Vist
---------------
SubConstructor
Sub Vist
Sub Vist
Sub Vist
---------------
说明:SubConstructor构造函数调用Parent2的构造函数时,Parent2里的vist方法实际上是SubConstructor的。
因为this.getClass()得到的是SubConstructor。 作者: 郑正华 时间: 2012-7-24 14:13 本帖最后由 郑正华 于 2012-7-24 14:17 编辑
楼主的代码结果应该是:
Parent Vist
Parent Vist
---------------
Sub Vist
Sub Vist
Sub Vist
---------------
parent 初始化的对象是父类 Parent2的 ,Parent2的对象一建立,就会调用它本身的构造函数,而Parent2的构造函数里有个visit()方法,就会调用Parent2的visit()方法,所以就输出第一行的“Parent Vist”,之后执行 parent.vist();语句,所以输出了第二行 “Parent Vist“。
sub初始化的对象是子类SubConstructor的 。SubConstructor 的对象一建立,就会调用它本身的构造函数,但是因为是继承关系,所以子类的构造函数里的第一行其实都有一个隐式的语句:super();也就是说子类的构造函数其实是这样子的:
SubConstructor()
{
super(); ←这条语句是隐藏的,
vist();
}
这个语句会调用父类的构造方法,然后父类的构造方法就调用父类的visit()方法,但因为子类覆盖了父类的 void vist() 方法,所以执行的语句是子类的void vist() 方法,所以输出了第一行的Sub Vist,第二行第三行的”Sub Vist“输出就和上面的两行”Parent Vist“输出是一个道理了。 作者: 姬仁贵 时间: 2012-7-24 15:54
郑正华 发表于 2012-7-24 14:13
楼主的代码结果应该是:
Parent Vist
Parent Vist
构造函数的作用就是给对象进行初始化,对象一建立就会调用与之对应的构造函数。你可以试试以下代码:
class Person
{
Person()
{
System.out.println("我被调用了!");
}
}
class Demo
{
public static void main(String[] args)
{
Person p = new Person();
}
}
你运行后就会发现,只写Person p = new Person(); Person类就已经被调用了。