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. 构造方法只 ...
随机推荐
- Commons CLI - Usage
Usage Scenarios The following sections describe some example scenarios on how to use CLI in applicat ...
- Spring(3.2.3) - Beans(11): depends-on
大多数情况下,Bean 之间的依赖非常直接:被依赖的 Bean 作为属性.在 XML 配置文件中最常见的就是使用 <ref/> 元素.在一些特殊情况下,Bean 之间的依赖不够直接.比如, ...
- Linux 命令 - scp: 远程文件拷贝
scp 与普通的文件复制命令 cp 类似,而它们之间最大的差别在于 scp 命令的源或目标文件是远程文件. 命令格式 scp [options] [[user@]host1:]file1 ... [[ ...
- AndroidStudio KeyMap
- Android第三方授权(QQ篇)
QQ授权比微信授权相对来说会方便一些 同样需要去官网下载sdk和导入sdk到自己的工程 http://wiki.connect.qq.com/%E7%A7%BB%E5%8A%A8%E5%BA%94%E ...
- Sql传参含有单引号
程序 exec heduling_date_select ' Name like @%a%@ or phone like @%a%@ or Cus_code like @%a%@ or objjc l ...
- PHP学习笔记 - 进阶篇(8)
PHP学习笔记 - 进阶篇(8) 日期与时间 取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 0 ...
- C#--格式化数值数据
如果数值数据需要更精细的格式化,每一个占位符都可以包含不同的格式字符,下表展示了核心格式化选项. 下面用一个例子来说明. namespace LearningCSharp { class Prog ...
- Poj OpenJudge 1068 Parencodings
1.Link: http://poj.org/problem?id=1068 http://bailian.openjudge.cn/practice/1068 2.Content: Parencod ...
- mysql优化之定位问题
首先先介绍几个关键字 1 show status 表示数据库当前的状态数据 show [session|global] status session是当前连接的统计结果 global 是数据库 ...