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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝锡强 黑马帝   /  2011-12-30 18:17  /  2516 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郝锡强 于 2011-12-31 11:32 编辑

public abstract class A { 
 int i=1;  
  public void printI() {  
  System.out.println("i="+i);  
  }
  }  
public class B  extneds A{  
    int i=2;  
    public static void main(String[] args) {  
    B b=new B();  
    b.printI();  
}  
}
结果为什么是1呢?

晓得了,如下,变量不覆盖

该贴已经同步到 郝锡强的微博

评分

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

查看全部评分

5 个回复

倒序浏览
因为B继承了A ,然后B就有了A的所拥有的属性和方法,当你调用printI() 方法时,是调用的父类的方法,而且子类没有重写printI() 这个方法,虽然你在A类定义了int i=2的值,这是当调用printI() 方法时,首先加载父类的变量值得。

评分

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

查看全部评分

回复 使用道具 举报
调用printI() 方法时,是调用的父类的方法,子类中并没有重写父类中的printI() 方法,当调用printI() 方法时,就会去加载父类该方法对应的的变量i的值。
回复 使用道具 举报
因为B继承了A
所以B拥有A的所有能继承的属性和行为
但是B并没有重写A的打印方法
所以默认调用的是父类的打印方法
因此就是这个结果喽

评分

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

查看全部评分

回复 使用道具 举报
(模仿)
知道你可能在疑惑,我明明在B中  i=2  了呀?
但是哥们,方法可以被覆盖,变量没有覆盖一说。
所以当调用了父类的printI方法后,输出的是父类中定义的i = 1;

总之一句话:B中哥们你没有覆盖printI方法,所以挂了。

评分

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

查看全部评分

回复 使用道具 举报

因为B继承了A ,然后B就有了A的所拥有的属性和方法,当你调用printI() 方法时,是调用的父类的方法,子类中并没有重写父类中的printI() 方法,当调用printI() 方法时,就会去加载父类该方法对应的的变量i的值

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马