黑马程序员技术交流社区
标题:
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