日期:2014-05-20  浏览次数:20575 次

Java继承想不明白的问题,求大神解决
本帖最后由 yz1311 于 2013-11-20 17:44:32 编辑

class A{
public   int i=1;
A(){
System.out.println ("A is created and i="+i);
}
}
class B extends A{
        B(){
                System.out.println ("B is created and i="+i);
                }
        void printI(){
     i++;
System.out.println ("i="+this.i+" "+super.i);
}
}


新建一个B的对象,然后调用printI()
输出结果
A is created and i=1
B is created and i=1
i=2 2


先初始化基类,然后是子类,子类的i自增,为什么基类的i也会变化?
继承

------解决方案--------------------
这两个i是同一个变量!!
你要看出区别在B里面加个i变量就看出来了


public class A {
public int i = 1;

A() {
System.out.println("A is created and i=" + i);
}

public static void main(String[] args) {
B b = new B();
b.printI();
}
}

class B extends A {
int i = 1;
B() {
System.out.println("B is created and i=" + i);
}

void printI() {
i++;
System.out.println("i=" + this.i + " " + super.i);
}

}


A is created and i=1
B is created and i=1
i=2 1

------解决方案--------------------
子类继承了父类public的属性,其实子类和父类用同一个属性i。
不行你把父类中的int i 注释掉,编译都会有问题。
如果你在子类中,新建一个自己的属性public int i = 1;那就和父类分开了。
------解决方案--------------------
Hi,
我来举一个例子,也许可以帮助楼主解决问题。
我把类比喻箱子。现在有箱子A和B。
当我们用new操作符的时候,就是拿箱子的行为。
1.new A的情况,只要取箱子A的内容。
2.new B的情况下,不但要取A的部分,还要取B的部分,组合成一个完整的内容,因为有继承关系。

继承的关系不是说把A的代码全部都拷贝到B中,形成新的代码。而是理解当new B的时候,新的引用拥有父类和子类所有的行为。