//假定一个子类Sub,继承自父类Super,那么在实例化Sub,也就是new Sub()时,构造方法是怎么执行的呢,下面的代码解释了这些,很重要
class Super{
static{System.out.println("静态代码块执行...");}
{System.out.println("非静态代码块执行...");}
public Super(){System.out.println("父类无参构造执行...");}
public Super(int test){System.out.println("父类全参构造执行...");}
}
class Sub extends Super{
public Sub(){System.out.println("子类无参构造执行...");}
public Sub(int test){System.out.println("子类全参构造执行...");}
}
class SubTest extends Super{
public SubTest(){//子类无参构造,显调父类有参构造
super(1);
System.out.println("子类无参构造执行");}
public SubTest(int test){
super(1);
System.out.println("子类全参构造执行...");
}
}
public class Test{
public static void main(String[] args) {
// 实例化子类,无参构造
Sub s=new Sub();
//实例化子类,全参构造
Sub s1=new Sub(1);
System.out.println("********华丽分割线********");
//实例化子类,无参构造
SubTest ts=new SubTest();
//实例化子类,全参构造
SubTest ts1=new SubTest(1);
}
}
输出:
静态代码块执行...
非静态代码块执行...
父类无参构造执行...
子类无参构造执行...
非静态代码块执行...
父类无参构造执行...
子类全参构造执行...
********华丽分割线********
非静态代码块执行...
父类全参构造执行...
子类无参构造执行
非静态代码块执行...
父类全参构造执行...
子类全参构造执行...
也就是,在实例化子类时(当然子类必有父类,不解释),先执行父类的构造方法,如果在子类的构造方法中没有显式调用父类的具体构造,那么编译器会默认执行无参构造
,如果子类的构造中明确了调用的是父类的具体(比如有参有参构造),那么执行的就是父类的那个构造:就是说,子类实例化时,必须执行父类的一种构造(如果没写,或者没指定是哪个父类构造,编译器默认是父类的无参构造),可以显式的调用super([type param])父类的有参构造完成相关的构造需要...依次类推,父类在执行自己的构造时,又会执行父类的父类的构造,一直到Object的构造,恐怖啊...呵呵
听过一种解释比较合理,就是说当你在实例化一个类时,其父类也实例化,其父类的父类也是如此,直到Object,所以会出现构造的向上不停执行直到public Object(){},代码中还写了代码块,java中的代码块分为静态与非静态两种,在演示中可以看出,静态代码块是最先且仅执行一次的代码,非静态代码块,每次随着父类构造之前执行一次...
分享到:
相关推荐
202 10.3.3 父子类间的构造器的调用流程 204 10.3.4 如何自定义构造器 207 10.4 什么是单子模式 208 10.5 构造器在程序中是何时运行的 211 10.6 综合练习 214 10.7 小结 215 10.8 习题 215 第11章 异常处理(精彩...
A) 抽象类使类与类之间依旧具有父子联系,而接口一般只是定义了一种规范,并不使实现的接口之间具有父子关系。 B) 可以为抽象类定义对象,但是不能为接口定义对象。 C) 抽象类与接口的用法几乎都相同,具体用哪一个...
但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。 (7) 在一个成员初始化列表中同时出现...
8.5.5 开启新线程执行类的重新载入 56 8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 ...
8.5.5 开启新线程执行类的重新载入 56 8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 ...
2.2.3 调用被子类重写的方法 2.3 父子实例的内存控制 2.3.1 继承成员变量和继承方法的区别 2.3.2 内存中子类实例 2.3.3 父、子类的类变量 2.4 final修饰符 2.4.1 final修饰的变量 2.4.2 执行"宏替换"的变量 ...
12.5.2 弄清层级关系--父子与兄弟 12.5.3 如何搜索特定节点 12.5.4 克隆节点--一个使用cloneNode()复制表格的例子 12.5.5 移动节点及其范例 12.5.6 关于添加新行和排序的小技巧 12.6 读写数据...
目录 概念: ...父子之间有相同的属性和方法 重写: 概念: 重写要求: 调用父类构造函数 为什么子类一定要访问父类中的构造函数? final 抽象: 概念: 特点: 接口 基础知识: 特点: 多态 概念:
7.3.3父子类对象的类型转换 7.4抽象类和接口 7.4.1为什么需要抽象类 7.4.2为什么需要接口 7.5其他内容 7.5.1final关键字 7.5.2Object类 7.6一些工具的使用 7.6.1将字节码打包发布 7.6.2文档的使用 7.7小结...
通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件...
10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 ...
10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 ...
7.8.3 调用ActiveX控件的方法 165 7.9 总结 166 第二部分 高级技术 第8章 使用GDI和字体的图像编程 167 8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3 使用TCanvas的属性 169 8.3.1 画笔 170 8.3.2 使用...
this(参数):调用本类的其他构造方法。 2. 作用域public,protected,private,以及不写时的区别?............................................. 9 Public 公有的 protected 受保护的 private 私有的 3. 编程...
2.8.1 视图类对文档类的调用 100 2.8.2 在框架类中获得当前的文档类和视图类对象指针 101 2.8.3 获得应用程序类对象的指针 101 2.8.4 从应用类对象中获得主框架类对象的指针 101 2.9 小结 102 第3章 Visual C++ 2010...
基于父类:代理对象与目标对象是父子关系.目标不能被final修饰 修改默认代理方法: 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议...
9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...