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

父类(超类)和子类的疑惑
如果在父类的内部使用子类的实例会有什么后果呢?!
又或者反过来,在子类的内部使用父类的实例又会有什么影响呢!?
如:
class   SuperClass{
          private   SubClass   instance   =   new   SubClass();
          ........
}
class   SubClass   extends   SuperClass   {
        private   SuperClass   instance   =   new   SuperClass();
        .........
}
偶尔想到这个问题,不知道这样在逻辑上会是什么后果!?

------解决方案--------------------
你在父类里定义了private 类型,不可以那么用吧
------解决方案--------------------
子类不继承父类的private类型.也没去调用他所以没什么关系吧.
------解决方案--------------------
应该会堆栈溢出
------解决方案--------------------
1).派生类中
class SuperClass{
int j = 0; //1.1 3.1
SuperClass(){};//2.1 3.2
}

class SubClass extends SuperClass{
int i = 0; //1.2
SubClass(){}; //2.2
SuperClass sc = new SuperClass(); //3.3
}
...
new SubClass(); // ===> 1.1-> 1.2-> 2.1-> 2.2-> 3.1-> 3.2-> 3.3

2).基类中
class SuperClass{
int j = 0;
SuperClass(){};
SubClass sc = new SubClass(); //1.1 StackOverflowError 1.1-> 1.2-> 1.1-> 1.2-> 1.1....
} //此例初始化第2阶段

class SubClass extends SuperClass{
int i = 0;
SubClass(){}; /1.2

}

不知道理解对否
------解决方案--------------------
首先子类的内部可以使用父类的实例,但是父类的内部使用子类的实例会有些限制,搂主所写的子类的实例初始化发生在父类实例构造过程中,所以会发生递归调用的情形,如果将子类的实例化过程不要放到父类的构造过程中,应当是可以的。
------解决方案--------------------
> > > 应该会堆栈溢出
同意