继承条件下的构造方法调用
2015-11-06 12:29
288 查看
(一)为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
答案:java 自动在派生类构造器中插入基类构造器运行,例如
那么,是不是可以认为基类构造器调用是派生类构造器的第一条语句,从而在派生类构造器调用的时候才调用呢?
然而结果是:A constructor B constructor
由此可见:基类的初始化发生在派生类的初始化(包括自动初始化、构造器等等)之前。,而是无参数时
(二)通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。调用基类中含“参数”的构造器时
但是结果GrandParent Created.String:Hello.Grandparent.(参数)
Parent Created
Child Created虽然你spuer("Hello.Grandparent")位于派生类的第一句,但是总之一句话,未显式调用基类构造器的情况下,编译器就查找基类的默认构造器,找不到报错;找到,加入对它的调用。基类没有默认构造器,就必须显式调用。基类的初始化发生在派生类的初始化(包括自动初始化、构造器等等)之前。
答案:java 自动在派生类构造器中插入基类构造器运行,例如
class A { A() { System.out.println("A constructor"); } } class B { B() { System.out.println("B constructor"); } } public class C extends A { B b = new B(); public static void main(String[] args) { C c = new C(); } }
那么,是不是可以认为基类构造器调用是派生类构造器的第一条语句,从而在派生类构造器调用的时候才调用呢?
然而结果是:A constructor B constructor
由此可见:基类的初始化发生在派生类的初始化(包括自动初始化、构造器等等)之前。,而是无参数时
(二)通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。调用基类中含“参数”的构造器时
class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent extends Grandparent { public Parent() { super("Hello.Grandparent."); System.out.println("Parent Created"); // super("Hello.Grandparent."); } } class Child extends Parent { public Child() { System.out.println("Child Created"); } }
但是结果GrandParent Created.String:Hello.Grandparent.(参数)
Parent Created
Child Created虽然你spuer("Hello.Grandparent")位于派生类的第一句,但是总之一句话,未显式调用基类构造器的情况下,编译器就查找基类的默认构造器,找不到报错;找到,加入对它的调用。基类没有默认构造器,就必须显式调用。基类的初始化发生在派生类的初始化(包括自动初始化、构造器等等)之前。
相关文章推荐
- HDU 5534 【2015长春现场赛 H】 Partial Tree
- 在使用Ibatis查询数据返回时,报如下错误:java ibatis The error happened while setting a property on the result object
- RabbitMQ 安装和配置02
- android编程实现悬浮窗体的方法
- 动画四 Android源码分析—属性动画的工作原理
- LeetCode Largest Rectangle in Histogram
- KMP算法(主要解释next表的构造)
- 【转】10分钟了解设计模式(C#)
- 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
- RabbitMQ 安装和配置
- js 三层引号嵌套
- 关于SVM中的几点解惑
- javascript类的创建及继承演变的过程
- 安卓性能优化策略小结(1)
- 字符串插入块链实现——数据结构上机实验
- 深度学习笔记(三)用Torch实现多层感知器
- Intellij idea 设置svn 父目录文件显示状态颜色
- hdu 5492 Find a path
- 初识HTML5的WebSocket
- first-bad-version