Java构造器:级联调用,调用兄弟构造器
级联调用:
class Father{
Father(){
System.out.println("Father birth");
}
public void announce(){
System.out.println("Father");
}
}
class Child extends Father{
Child(){
System.out.println("Child birth");
}
@Override
public void announce(){
System.out.println("Child");
}
}
public class Hello {
public static void main(String[] args){
Child child=new Child();
}
}
上述代码的执行结果如下:
Father birth
Child birth
我们可以看到,先执行了父类的构造器,然后执行子类的构造器。因此我们可以理解级联调用。
级联调用指继承关系中子类构造器调用时会默认调用父类无参构造器作为子类构造器的第一句,除非子类构造器在第一句时显式的调用父类的其他构造器。
需要说明的是,子类构造器第一句以外位置不能对父类构造器进行调用。
调用兄弟构造器:
class Test{
Test(){
System.out.println("Default initialize");
}
Test(int i){
this();
System.out.println("I have "+i+" as a parameter.");
}
}
public class Hello {
public static void main(String[] args){
Test test=new Test(5);
}
}
上述代码中的this就是一个调用兄弟构造器的例子,此处和级联调用类似,必须把调用语句放置在构造器的第一行。执行结果如下:
Default initialize
I have 5 as a parameter.
Java严格的级联调用,兄弟调用顺序,保证了程序的易读性和规范性,并且方便了编译器对其进行实现。另外一旦使用了this()方法放置在第一行去调用兄弟构造器,则不再调用默认的无参父类构造器,而由调用的兄弟构造器去调用无参父类构造器,换言之,推迟了无参父类构造器的调用。
Java构造器:级联调用,调用兄弟构造器的更多相关文章
- java使用this关键字调用本类重载构造器
在构造器中可以调用本类的其他重载构造器,不能使用构造器名称来调用另一个构造器,而是应该使用Java特定的this(-.)来调用. this(-.)方法必须出现在构造器中的第一行,用来调用其他重载构造器 ...
- Swift中可能失败的构造器的传播(调用)和重写
import Foundation /* 可能失败构造器的传播(调用) 1.可能失败的构造器可以调用同一个类中的普通构造器 2.普通构造器不能调用同一个类中的可能失败构造器 3.结构体中, 普通构造器 ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- Java - 用静态工厂方法代替构造器
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...
- java的继承 和super关键字 构造器
面向对象的特性二继承: 继承的好处: 1.减少代码的冗余.提高了代码的复用性 2.便于功能的扩展 3.为之后多态的使用,提供了前提 继承的格式: class A extends B{} A:子类.派生 ...
- java小心机(2)| 重载和构造器的小细节
每天进步一点点,距离大腿又近一步! 阅读本文大概需要10分钟 java小心机,为你诉说java鲜为人知的一面 涉及基本数据类型的重载 基本类型能从一个"较小"的类型自动提升到&qu ...
- 深入分析Java反射(六)-反射调用异常处理
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...
- 【Java基础】构造方法调用构造方法
从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) // ...
随机推荐
- 【leetcode80】Reverse Vowels of a String(元音字母倒叙)
题目描述: 写一个函数,实现输入一个字符串,然后把其中的元音字母倒叙 注意 元音字母包含大小写,元音字母有五个a,e,i,o,u 原文描述: Write a function that takes a ...
- 【一天一道LeetCode】#65. Valid Number
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Validat ...
- Zookeeper Java客户端API的使用
1. 原生api 具体查看下面github代码 2. ZkClient ZkClient是Github上一个开源的ZooKeeper客户端.ZkClient在ZooKeeper原生 A ...
- android binder机制详解
摘要 Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原因:1是目前网上已经有2篇很好的文章了,2 ...
- hadoop环境配置过程中可能遇到问题的解决方案
Failed to set setXIncludeAware(true) for parser 遇到此问题一般是jar包冲突的问题.一种情况是我们向java的lib目录添加我们自己的jar包导致had ...
- Cocos2d中update与fixedUpdate的区别(二)
关于update:方法的目的 update:方法的目的在于给你一个更新你的游戏(你游戏中的所有对象,标签等待)的机会,在它们被渲染到屏幕之前. 换句话说,如果你想要一些游戏对象显示在屏幕的特定位置,你 ...
- 如何配置android的adb环境变量
如果打开DOS窗口,输入adb显示既不是内部命令也不是外部命令,则说明没有配置adb环境变量.方法如下: 第一步: 打开环境变量配置窗口.右击计算机,属性-高级系统设置-环境变量. 第二部: 添加an ...
- 第一个Polymer应用 - (2)创建你自己的元素
原文链接: Step 2: Your own element翻译日期: 2014年7月6日翻译人员: 铁锚通过上一节的学习和实践, 您已经完成了一个基本的应用程序结构(application stru ...
- glib-dbus 在ubuntu9.10 和 ubuntu10.04 上安装环境的搭建
dbus-glib 安装环境搭建 安装 dbus apt-get install dbus 安装 d-feet ,用于查看 session bus 和 system bus apt-get insta ...
- Linux进程快照相关知识
查寻内核版本 uname -a // uname -r 进程快照 ps report a snapshot of the current processes USER ...