A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TS__likewise 中级黑马   /  2014-6-16 19:39  /  1393 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A {
public void fun1() {
System.out.println(" A ");
}

public void fun2() {
fun1();       
}

}

class B extends A{
public void fun1() {
System.out.println(" B");
}       
}

public class Test {

public static void main(String[] args) {

new B().fun1();
new B().fun2();
}

}
运行后的结果为:
B
B
new B().fun2(),是调用了从A继承来的方法fun2(),正如fun2()放里面看到的,又调用fun1()方法,最后输出的结果为重写后B类fun1()的结果而不是父类A里面fun1()的结果,这是为什么

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

5 个回复

倒序浏览
fun2()是子类继承来的,fun()1把父类的fun()1覆盖了
所以对于子类他有的方法是
public void fun1() {
System.out.println(" B");
}     
public void fun2() {
fun1();        
}
创建B对象,调用fun()2,输出肯定是B啊

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
现在 B对象的实例指向了A对象的引用  调用方法当然是B的方法  你懂得
回复 使用道具 举报
ClassA c = new ClassB();

成员变量看左边,成员方法看右边。
回复 使用道具 举报
1. 子类B复写了fun1();所以运行fun1()结果为B
2. 创建了子类B的对象,因此运行子类B的fun1(),结果为B
回复 使用道具 举报
对象是谁,调用谁的方法  我一直死记住
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马