黑马程序员技术交流社区

标题: Java继承 [打印本页]

作者: 郝锡强    时间: 2011-12-30 18:17
标题: Java继承
本帖最后由 郝锡强 于 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呢?

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

该贴已经同步到 郝锡强的微博
作者: 李爱霞    时间: 2011-12-30 18:27
因为B继承了A ,然后B就有了A的所拥有的属性和方法,当你调用printI() 方法时,是调用的父类的方法,而且子类没有重写printI() 这个方法,虽然你在A类定义了int i=2的值,这是当调用printI() 方法时,首先加载父类的变量值得。
作者: 颜宗茂    时间: 2011-12-30 21:28
调用printI() 方法时,是调用的父类的方法,子类中并没有重写父类中的printI() 方法,当调用printI() 方法时,就会去加载父类该方法对应的的变量i的值。
作者: 马新乐    时间: 2011-12-30 21:28
因为B继承了A
所以B拥有A的所有能继承的属性和行为
但是B并没有重写A的打印方法
所以默认调用的是父类的打印方法
因此就是这个结果喽
作者: 陈腾跃    时间: 2011-12-30 21:46
(模仿)
知道你可能在疑惑,我明明在B中  i=2  了呀?
但是哥们,方法可以被覆盖,变量没有覆盖一说。
所以当调用了父类的printI方法后,输出的是父类中定义的i = 1;

总之一句话:B中哥们你没有覆盖printI方法,所以挂了。
作者: lvwenwen88    时间: 2011-12-30 22:30

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2