java中同一个类同的构造方法怎么调用另一个构造方法呢?
如果一个类中有多个构造方法,在一个构造方法中想要调用另一个构造方法,需要用到this(参数)这样的方式,且这行语句必须写在构造方法的第一行。
public class B {
public B() {
/**
* 这里的this(字符串)就是调用符合参数要求的构造方法
* 这个this(字符串)语句只能写在这个构造方法的第一行
* 否则会造成编译错误。
*/
this("调用带参数的构造方法");
System.out.println("这是一个不带参数的构造方法");
}
public B(String s) {
System.out.println("这是一个带参数的构造方法");
}
public static void main(String[] args) {
B b = new B();
}
}
输出结果为:
这是一个带参数的构造方法
这是一个不带参数的构造方法
- java中的继承
java中子类继承父类,在创建子类的对象时,其实默认是先调用父类的无参数的构造方法,创建父类对象,然后再创建子类对象,子类对象和父类对象时是挨着存放的,因此,子类对象可以使用父类的方法和全局变量。
class Parent{
public Parent() {
System.out.println("调用了父类的无参数构造方法");
}
public Parent(String inforamtion) {
System.out.println("调用了父类有参数的构造方法");
}
}
public class Child extends Parent {
public Child() {
System.out.println("子类的无参数构造方法");
}
public static void main(String[] args){
Child child = new Child();
}
}
其输出结果为
调用了父类的无参数构造方法
子类的无参数构造方法
现在我们把父类中无参数的构造方法注释掉,再次调用可以发现出现了编译错误。因为子类会默认调用父类的无参数的构造方法来生成父类对象,而我们把父类中的无参数构造方法注释掉后,子类就找不到了,因此出错。我们可以为子类指定父类中带参数的构造方法。
class Parent{
/*public Parent() {
System.out.println("调用了父类的无参数构造方法");
}*/
public Parent(String inforamtion) {
System.out.println("调用了父类有参数的构造方法");
}
}
public class Child extends Parent {
public Child() {
/**
* super(参数)这句是调用父类的有参数的构造方法,其中super必须写在第一行
* 否则出错,因为是先生成父类对象,再生成子类对象。在这里的super表示的是父类的
* 应用。
*/
super("调用父类中有参数的构造器,且参数类型为字符串");
System.out.println("子类的无参数构造方法");
}
public static void main(String[] args){
Child child = new Child();
}
}
输出结果为:
调用了父类有参数的构造方法
子类的无参数构造方法