public class BaseClass
{
public BaseClass()
{
fun();
} public void fun()
{
System.out.println( "基类输出" );
}
}class ChildClass extends BaseClass
{
public void fun()
{
System.out.println( "子类输出" );
}}测试类是:public class Main
{
public static void main(String[] args){
BaseClass b=new BaseClass();
ChildClass c=new ChildClass();
}
}
输入结果是:
基类输出
子类输出
我不明白,我构造子类对象时,子类默认调用基类构造方法,基类构造方法去调用本身的fun函数 为什么却执行的子类的fun方法了呢?
{
public BaseClass()
{
fun();
} public void fun()
{
System.out.println( "基类输出" );
}
}class ChildClass extends BaseClass
{
public void fun()
{
System.out.println( "子类输出" );
}}测试类是:public class Main
{
public static void main(String[] args){
BaseClass b=new BaseClass();
ChildClass c=new ChildClass();
}
}
输入结果是:
基类输出
子类输出
我不明白,我构造子类对象时,子类默认调用基类构造方法,基类构造方法去调用本身的fun函数 为什么却执行的子类的fun方法了呢?
这一句输出 基类输出 ChildClass c=new ChildClass(); 这一句输出 子类输出
因为childClass这个类已经重写了BaseClass的fun方法了.
你可以把BaseClass里的fun方法改成private权限,这样你会看到你想要的结果吧.
你学过其他的语言吗?如C++?
可以看下Thinking in Java 这本书,我也看得这个书学的。效果还可以。
public void fun()
{
System.out.println( "子类输出" );
}
你认为那个fun会存在,
你要搞清楚,不要以为两个类没写在一起,就是两个类了,你把父类和子类看成一个模块,一个类来想下就明白了.