关于子类继承父类的那些讨论(不断更新中......)
2011-03-25 10:35
281 查看
一、构造函数
例:父类
public class Animal {
public Animal() {
System.out.println("Animal");
}
}
子类
public class Cat extends Animal{
public Cat() {
System.out.println("Cat");
}
}
如果运行语句Cat cat=new Cat();
为什么运行结果为:Animal
Cat
难道在创建Cat的实例对象的时候,还调用了Cat的父类Animal的构造方法 ?
那是不是也创建了Animal的对象,只不过因为没有引用指向它们所以又被java的
“垃圾自动回收”机制回收了???没有,在创建一个子类对象时,并不创建对象,创建对象是要用new的啊。子类的构造器先调用父类的无参数父类构造器,除非你在构造器中显示调用了父类的某个构造器。调用构造函数的意义:
子类继承父类,一种是把父类属性继承下来,然后调用父类的构造函数来初始化这些属性,直致所有这些继承下来属性都初始化完毕(即所有父类的构造函
数都被调用),这样解释的话,当然不会构造父类对象! 因为这些构造函数的调用是为了初始化从父类继承下来的属性,被初始化的属性
的地址始终在本对象当中,虽然会出现 象 构造父类对象的现象,但那只是子类实例化的一个过程,并非实际上生成父类对象。
打个比喻,或许你更能明白: 人类出生之前的十个月,会出现象哺乳动物的特征(胎儿在一个月时最象,到第十个月时,就完全是人了),你不能说,在形成人的过程当中,就要先生出一个哺乳动物,然后再生出一个人吧。
希望你能明白这个比喻! Thinking in Java 第六章中说得很明白:
创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。
当然,基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化,通过调用基础类构建器,后者有足够的能力和权限来执
行对基础类的初始化。在衍生类的构建器中,Java会自动插入对基础类构建器的调用。
例:父类
public class Animal {
public Animal() {
System.out.println("Animal");
}
}
子类
public class Cat extends Animal{
public Cat() {
System.out.println("Cat");
}
}
如果运行语句Cat cat=new Cat();
为什么运行结果为:Animal
Cat
难道在创建Cat的实例对象的时候,还调用了Cat的父类Animal的构造方法 ?
那是不是也创建了Animal的对象,只不过因为没有引用指向它们所以又被java的
“垃圾自动回收”机制回收了???没有,在创建一个子类对象时,并不创建对象,创建对象是要用new的啊。子类的构造器先调用父类的无参数父类构造器,除非你在构造器中显示调用了父类的某个构造器。调用构造函数的意义:
子类继承父类,一种是把父类属性继承下来,然后调用父类的构造函数来初始化这些属性,直致所有这些继承下来属性都初始化完毕(即所有父类的构造函
数都被调用),这样解释的话,当然不会构造父类对象! 因为这些构造函数的调用是为了初始化从父类继承下来的属性,被初始化的属性
的地址始终在本对象当中,虽然会出现 象 构造父类对象的现象,但那只是子类实例化的一个过程,并非实际上生成父类对象。
打个比喻,或许你更能明白: 人类出生之前的十个月,会出现象哺乳动物的特征(胎儿在一个月时最象,到第十个月时,就完全是人了),你不能说,在形成人的过程当中,就要先生出一个哺乳动物,然后再生出一个人吧。
希望你能明白这个比喻! Thinking in Java 第六章中说得很明白:
创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。
当然,基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化,通过调用基础类构建器,后者有足够的能力和权限来执
行对基础类的初始化。在衍生类的构建器中,Java会自动插入对基础类构建器的调用。
相关文章推荐
- 关于子类继承父类属性的问题讨论(希望得到大神指点)
- 继承中关于静态代码块,子类和父类的静态代码块的执行情况分析
- 关于Java,那些我心存疑惑的事(不断更新中...)
- 关于Java,那些我心存疑惑的事(不断更新中...)
- 关于C++子类在继承父类的构造函数时的一些情况
- Java-关于子类是否继承了父类的private实例变量
- 关于子类继承父类后调用方法的问题
- 关于继承及父类引用指向子类的一些总结
- 关于子类继承父类,父类调用被子类重载的方法是输出什么
- 关于继承时子类重写父类方法和覆盖父类变量的若干问题 (待进一步研究)
- 关于Java,那些我心存疑惑的事(不断更新中...)
- 关于子类继承父类后调用方法的问题
- 关于Java中子类能否继承和重写父类的静态方法问题
- 关于构造方法:子类只能继承父类的无参数构造方法
- 关于父类引用指向子类对象的那些事
- 关于子类为何不能继承父类构造方法的几点解释
- 关于子类是怎么继承下父类的成员与构造函数
- 在继承中的问题,关于静态代码块,子类和父类的静态代码块的执行情况
- 关于继承中子类和父类中构造函数和析构函数运行的顺序,和继承的多态
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题