构造方法(二)

本文详细介绍了Java中构造方法的使用,包括重载构造方法、默认构造方法、子类调用父类构造方法以及构造方法的作用域。通过实例展示了如何通过this和super关键字在构造方法间传递控制权,并强调了构造方法不能被继承。文章还提供了多个例子和试题帮助理解构造方法的使用规则和注意事项。
摘要由CSDN通过智能技术生成

5.2.2 重载构造方法
如果有一个类带有几个构造方法,那么也许会想复制其中一个构造方法的某些操作到另一个构造方法中。可以通过使用关键字this作为一个方法调用来达到这个目的。不能通过方法名直接调用构造方法。
public class Employee {
private String name;
private int salary;
public Employee(String n, int s) {
name = n;
salary = s;
}
public Employee(String n) {
this(n, 0);
}
public Employee() {
this( " Unknown " );
}
}
在第二个构造方法中,有一个字符串参数,调用this(n,0)将控制权传递到构造方法的另一个版本,即采用了一个String参数和一个int参数的构造方法。
在第三个构造方法中,它没有参数,调用this("Unknownn")将控制权传递到构造方法的另一个版本,即采用了一个String参数的构造方法。
对于this的任何调用,如果出现在任何构造方法中,必须作为第一个语句。
5.2.3 缺省构造方法
缺省构造方法是没有参数的构造方法,你可以显式定义类的缺省构造方法。
为了保证每个类至少有一个构造方法,如果定义的类中一个构造方法也没有写,Java将自动提供一个缺省构造方法。该构造方法没有参数,用public 修饰,而且方法体为空。格式如下:
public ClassName(){}
只要类中显式定义了一个或多个构造方法,而且所有显式定义的构造方法都带参数,那么将失去缺省构造方法。
举例如下:
public class Sample1{}
public class Sample2
{
public Sample2(int a){System.out.println("My Constructor");}
}
public class Sample3
{
public Sample3(){System.out.println("My Default Constructor");}
}
可以调用Sample1的缺省构造方法来创建Sample1对象。
Sample1 s=new Sample1();
Sample2类的缺省构造方法失效,因此以下的创建Sample2对象的方法编译会出错。
Sample2 s=new Sample2();
正确的创建方法是:
Sample2 s=new Sample2(0);
Sample3类定义了自己的缺省构造方法,因此以下语句是合法的。
Sample3 s=new Sample3();
5.2.4 子类调用父类的构造方法
父类的构造方法不能被子类继承。子类不能直接通过方法名调用父类的一个构造方法,而是要通过super关键字调用父类的一个构造方法,super语句必须位于子类构造方法的第一行。
例如:
/**
* Son.java
*/
class GrandPa
{
protected GrandPa()
{
System.out.println("default GrandPa");
}
public GrandPa(String name)
{
System.out.println(name);
}
}
class Father extends GrandPa
{
protected Father()
{
System.out.println("default Father");
}
public Father(String grandPaName,String fatherName)
{
super(grandPaName);
System.out.println(fatherName);
}
}
public class Son extends Father
{
public Son()
{
System.out.println("default Son");
}
public Son(String grandPaName,String fatherName,String sonName)
{
super(grandPaName,fatherName);
System.out.println(sonName);
}
public static void main(String args[])
{
Son s1=new Son();
Son s2= new Son("My GrandPa", "My Father", "My Son");
}
}
执行语句:
Son s2=new Son("My GrandPa", "My Father", "My Son");
将会输出如下结果:
My GrandPa
My Father <

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值