Java之构造器<constructor>
2016-03-10 14:57
423 查看
java之构造器(构造方法)
1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
在这里我们来一段代码看看:
来看看这段代码有什么问题。
有没有看出来?
首先,在main方法里面Son son=new Son(“son”);
使用new关键字来创建对象,在创建对象时要调用son的构造方法。
看Son类的构造方法,有一个显示的传参的构造方法,因为子类是继承自父类,在调用自身构造方法时,又需要调用父类的构造方法。由于子类没有说明调用父类的哪个构造方法,那就会默认调用父类的无参构造方法(在子类的有参构造的第一行有个隐藏的调用父类的构造方法super())。
在看Father类的构造方法,只有一个显示的传参的构造方法(在java中有条规定,既然提供了显示的构造方法,那么就不在提供默认的构造方法),那么子类显然在父类中找不到相应的构造方法,就会报错:
Implicit super constructor Father() is undefined. Must explicitly invoke another constructor
那么,可以有两种改法,
A:
A修改后最后的结果是:I’m son
B
B修改后,最终的结果是:
I’m Father
I’m son
1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
在这里我们来一段代码看看:
class Father{ public Father(String f){ System.out.println("I'm father"); } } class Son extends Father{ public Son(String f){ //这里有一个默认的调用父类的构造 super() System.out.println("I'm son"); } public static void main(String[] args){ Son son=new Son("son"); } }
来看看这段代码有什么问题。
有没有看出来?
首先,在main方法里面Son son=new Son(“son”);
使用new关键字来创建对象,在创建对象时要调用son的构造方法。
看Son类的构造方法,有一个显示的传参的构造方法,因为子类是继承自父类,在调用自身构造方法时,又需要调用父类的构造方法。由于子类没有说明调用父类的哪个构造方法,那就会默认调用父类的无参构造方法(在子类的有参构造的第一行有个隐藏的调用父类的构造方法super())。
在看Father类的构造方法,只有一个显示的传参的构造方法(在java中有条规定,既然提供了显示的构造方法,那么就不在提供默认的构造方法),那么子类显然在父类中找不到相应的构造方法,就会报错:
Implicit super constructor Father() is undefined. Must explicitly invoke another constructor
那么,可以有两种改法,
A:
class Father{ public Father(){}//提供一个显示的无参构造 public Father(String f){ System.out.println("I'm father"); } } class Son extends Father{ public Son(String f){ System.out.println("I'm son"); } public static void main(String[] args){ Son son=new Son("son"); } }
A修改后最后的结果是:I’m son
B
class Father{ public Father(String f){ System.out.println("I'm father"); } } class Son extends Father{ public Son(String s){ super(s)//明确调用父类的有参构造 System.out.println("I'm son"); } public static void main(String[] args){ Son son=new Son("son"); } }
B修改后,最终的结果是:
I’m Father
I’m son
相关文章推荐
- java应用故障排查
- Spring注解【非单例】
- JAVA 判断一个字符串是不是一个合法的日期格式
- (二) WebService-- JDK 发布WS服务
- (三) WebService-- JDK 客户端调用
- 毕业设计
- eclipse 调试之异常断点
- Java笔记
- 解决weblogic的JDK和编码问题
- Java 标准计算器(使用SWT做界面)
- java jersey介绍
- Java设计模式之装饰模式
- 基于java网上商城源码设计
- JDK JRE JVM
- Intellj IDEA14上用Debug启动项目启动不了:Unable to open debugger port: java.net.SocketException "socket closed"
- 通过Javacv摄像头连续抓图
- java连接mogodb
- Java是最基本的数据类型吗?
- Java Map遍历方式的选择
- struts2标签大全1