class Base {
public void display() {
System.out.println("在父类中输出");
}
}class Child extends Base { public void display() {
System.out.println("在子类中输出");
super.display();
}
public void sysHi() {
System.out.println("你好");
}
}public class Test {
public static void main(String[] args) {
Base b = new Child();
b.sysHi(); //编译出错
b.display();
}
}
程序运行在b.sysHi()这行报错。
将出错的代码注释,程序运行的时候打印了"在子类中输出 在父类中输出"这两句话,那说明调用的是子类的display方法,那就表示b是子类对象,那如果是子类对象,为什么不能调用子类本身中的sysHi方法呢?
在main方法中创建的b对象,到底是父类(Base)对象还是子类(Child)对象呀?
求各位大虾指点迷津
public void display() {
System.out.println("在父类中输出");
}
}class Child extends Base { public void display() {
System.out.println("在子类中输出");
super.display();
}
public void sysHi() {
System.out.println("你好");
}
}public class Test {
public static void main(String[] args) {
Base b = new Child();
b.sysHi(); //编译出错
b.display();
}
}
程序运行在b.sysHi()这行报错。
将出错的代码注释,程序运行的时候打印了"在子类中输出 在父类中输出"这两句话,那说明调用的是子类的display方法,那就表示b是子类对象,那如果是子类对象,为什么不能调用子类本身中的sysHi方法呢?
在main方法中创建的b对象,到底是父类(Base)对象还是子类(Child)对象呀?
求各位大虾指点迷津
楼主【hnxt_hwj】截止到2008-08-03 23:47:22的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:10 每贴平均分数:5
回帖的总数量:2 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:1 结贴的总分数:0
无满意结贴数:1 无满意结贴分:20
未结的帖子数:1 未结的总分数:10
结贴的百分比:50.00 % 结分的百分比:0.00 %
无满意结贴率:100.00% 无满意结分率:---------------------
楼主加油
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=hnxt_hwj
Base b = new Child();
Child c = (Child)b; //强制类型转换
c.sysHi(); //这里就不会错了
当然,以上代码只有神经病才会在实际中写,我主要就是想表达实际你创建的是Child的对象,但是由于你用的是Base的引用,所以只知道Base中定义的方法,而且实际调用的是Child中实现的方法。不知道我说得是不是混乱不堪
b.display():
编译的时候,发现Base类型有display方法,编译成功.
运行的时候,发现引用b实际上指向的内存中的对象是Child类型的,就会调用Child的dispaly方法.
b.sysHi():
编译的时候,发现Base类型没有sysHi方法,编译失败.