java 构造函数
1、public className(){}。
2、名称与类名相同,无返回值,无返回类型,void也不行。(就是上边的形式,除了可以有参数)。
3、有0个或多个参数。
4、每个类都至少有一个constructor。如果没有显示的写,系统会默认构造一个方法体为空的空参构造函数。如果类有显示声明的构造函数(不一定是空参的),那么系统就不会默认构造一个空参constructor,进而若声明的函数正好不是空参的,那么该类就没有空参构造函数,而空参构造函数始终是一个类的默认构造函数)。
5、每个类可以有多个constructor,即重载,其参数不同。默认的constructor是空参构造函数。
6、constructor用于new一个新的对象。
7、继承。子类不会继承父类constructor(因为此时继承下来的类名和子类类名不同),但是出于尊重,在initialize子类之前,必须先initialize父类(下边第二条)
1)子类继承父类,子类构造器中,如果要显示的调用父类构造器,必须在其第一行中写super(),eg:
public class Son{
public Son(<参数>){
super(<参数>);
...
}
}
2)子类继承父类,子类构造器中如果没有显示的调用父类构造器,那么我们在调用执行子类构造器时,系统会默认先调用父类默认构造器(空参构造器),即会在子类构造器的第一行默认加上super()。如果父类显示声明了带参构造器,而没有声明空参构造器,那么编译器就会报错了。 即不管怎样,都是要先执行父类的构造函数,以把父类的东西继承下来,然后才执行子类本身。 另外这个调用是从父层往下一层一层调用的,即先调用执行父父层的默认构造器,然后父层的默认构造器,然后子类构造器,依此类推。eg:
public class Grandfather {
public Grandfather(){
System.out.println("This is Grandfather!");
}
public Grandfather(String s){
System.out.println("This is Grandfather"+s);
}
}
public class Father extends Grandfather {
public Father(){
System.out.println("This is Father!");
}
public Father(String s){
System.out.println("This is Father!"+s);
}
}
public class Son extends Father {
public Son(){
System.out.println("This is Son!");
}
public Son(String s){
System.out.println("This is Son"+s);
}
}
public class Construct {
/**
* @param args
*/
public static void main(String[] args) {
Son son = new Son();
System.out.println("**********************************");
Son son1 = new Son("**==**");
}
}
执行结果:
This is Grandfather!
This is Father!
This is Son!
**********************************
This is Grandfather!
This is Father!
This is Son**==**
从控制台打印的结果可以看出,当执行子类时,都是去找它的父类的默认的构造函数,先执行父类的构造函数,再执行子类的本身。
针对以上情况,我们现在做个修改,改其中的一个类的代码如下:把Grandfather类显式写出的缺省构造函数注释掉:
public class Grandfather {
// public Grandfather(){
// System.out.println("This is Grandfather!");
// }
//
public Grandfather(String s){
System.out.println("This is Grandfather"+s);
}
}
此时,Father类就会报错了。即子类没有显示调用的情况下,父类要么没有声明任何构造器,要么有一个显示声明的空参构造器。
上述若想不报错,也可以在Father类中显示声明对父类构造器的调用:
public class Father extends Grandfather {
public Father(){
super("**ss**");
System.out.println("This is Father!");
}
public Father(String s){
super(s);
System.out.println("This is Father!"+s);
} }
执行Construct.java
控制台输出为:
This is Grandfather**ss**
This is Father!
This is Son!
**********************************
This is Grandfather**ss**
This is Father!
This is Son**==**
java 构造函数的更多相关文章
- java构造函数修饰符
java 构造函数,可以被访问修饰符修饰,而不能被特殊修饰符修饰:(在编译器经过测试) 访问修饰符: public (最常用,其他类的任何位置都可以访问) protected(能够在同一包中被子类访问 ...
- JAVA构造函数(方法)
一.什么是构造函数 java构造函数,也叫构造方法,是java中一种特殊的函数.函数名与相同,无返回值. 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法. 在现 ...
- PHP与JAVA构造函数的区别
早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...
- java构造函数,java的静态块理解
今天我遇到这样的代码块,理解甚久,现在理解了,举一些例题给你看看 先创建一个One类: package accp.com;/** * 其中一个类 * @author xuxiaohua * */pub ...
- java 构造函数内部的多态方法 完全剖析
我们先来看一个例子,如果你读过<java编程思想>的话 应该会有印象 package com.test.zj; public class PolyConstructors { public ...
- java构造函数使用方法总结
使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回 ...
- JAVA构造函数简析
构造函数是java新建对象的一种手段 构造函数可以重载 如果一个类中有多个域,那么就可能需要多个构造函数.这时候,使用重载就可以了 构造函数中this和super的使用 this:(1)this用于本 ...
- 关于java构造函数,静态代码块,构造代码块,和普通代码块相关总结(一)
构造函数.构造代码块和静态代码块容易混淆,它们的执行条件和执行顺序也常常容易犯迷.这里就针对这些问题说一下我个人的一些理解,顺便对这部分内容做个小结. 一.构造函数 格式:类名(参数1,参数2,-){ ...
- [ Java学习基础 ] Java构造函数
构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...
随机推荐
- 显示创建一个表的SQL语句
显示创建数据库中包的语句,从而可以方便的对表的结构进行修改和复制(当然还有其他的方式) 显示表结构: 显示创建表语句: show create table tablename;
- hdu 4374 单调队列优化动态规划
思路:我只想说,while(head<=rear&&que[rear].val+sum[j]-sum[que[rear].pos-1]<=dp[i-1][j]+num[i- ...
- office2013 win 32bit (含激活工具)
office2013官方下载免费完整版32位(含永久激活工具) 百度云盘:http://pan.baidu.com/s/1jHgfZ1s
- 核心概念 —— 服务容器
1.简介 Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具.依赖注入听上去很花哨,其实质是通过构造函数或者某些情况下通过 set 方法将类依赖注入到类中. 让我们看一个简单的例子: ...
- 新增html元素的使用
今天学习HTML5中新增元素的使用 (Ⅰ)新增主体结构元素 Section元素:用于对网站或应用程序中的内容进行分块. <section> <h1></h1> &l ...
- Linux 命令 - jobs: 显示后台作业的状态信息
命令格式 jobs [-lnprs] [jobspec ...] jobs -x command [args] 命令参数 -l 额外显示作业的进程 ID. -n 只列出状态发生变化的进程. -p 只列 ...
- OC 成员变量作用域
1. 成员变量作用域: @public :在任何地方都能直接访问对象的成员变量. @private :只能在当前类的对象方法中直接访问.(@implementation中默认是@priv ...
- JqGrid在IE8中表头不能分组的解决办法
修改JqGrid的js脚本: for (d = 0; d < c; d++) { if (b[d] != undefined) { //主要是添加这个判断 if (b[d].startColum ...
- 用sinopia搭建npm私服
需求(这段话是摘抄参考文档的,因为作者也想这么说): 公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件.模块和项目.对于前端,最熟悉的莫过于n ...
- 洛古 P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目提供者lzn 标签 动态规划 洛谷原创 难度 提高+/省选- 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电 ...