gpt4 book ai didi

java 父类(super class)有多个构造函数

转载 作者:行者123 更新时间:2023-12-01 16:48:57 25 4
gpt4 key购买 nike

我有一个带有 3 个构造函数的父类(super class),我想知道是否有更智能的方法来编写子类构造函数

public class Person{

private String name;
private int age;
private String homeTown;


public Person(String name){
this.name = name;
this.age = 18;
this.homeTown = "Atlanta";
}

public Person(String name, int age){
this.name = name;
this.age = age;
this.homeTown = "Atlanta";
}

public Person(String name, int age, String homeTown){
this.name = name;
this.age = age;
this.homeTown = homeTown;
}

我还有一个继承父类(super class)的子类

public class Student extends Person{
private double avgGPA;
private int ID;
private String[] classes;

public Student(double avgGPA, int ID, String[] classes, String name){
super(name);
this.avgGPA = avgGPA;
this.ID = ID;
this.classes = classes;
}

public Student(double avgGPA, int ID, String[] classes, String name, int age){
super(name, age);
this.avgGPA = avgGPA;
this.ID = ID;
this.classes = classes;
}

public Student(double avgGPA, int ID, String[] classes, String name, int age, String homeTown){
super(name, age, homeTown);
this.avgGPA = avgGPA;
this.ID = ID;
this.classes = classes;
}

我的子类工作正常并且运行没有错误,但我想知道是否有另一种方法可以为子类编写构造函数,而无需编写相同的构造函数 3 次,只是因为父类(super class)有 3 个不同的构造函数。

最佳答案

好吧,Java 中有一些东西可以简化您的父类(super class)。您可以使用 this(); 调用同一类中的另一个构造函数。因此,不要为每个构造函数设置每个变量,而是使用一个变量设置构造函数并使用 this(); 传递默认值。对于您的父类(super class),您可以使用这些:

public Person(String name){
this(name, 18, "Atlanta");
}

public Person(String name, int age){
this(name, age, "Atlanta");
}

public Person(String name, int age, String homeTown){
this.name = name;
this.age = age;
this.homeTown = homeTown;
}

对于子类,我将创建一个名为 setVars 的私有(private)方法,它接受您要使用的三个变量:double avgGPAint IDString[] 类。因此,您的类可以如下所示,而不是在每个构造函数中设置它们:

public Student(double avgGPA, int ID, String[] classes, String name){
super(name);
setVars(avgGPA, ID, classes);
}

public Student(double avgGPA, int ID, String[] classes, String name, int age){
super(name, age);
setVars(avgGPA, ID, classes);
}

public Student(double avgGPA, int ID, String[] classes, String name, int age, String homeTown){
super(name, age, homeTown);
setVars(avgGPA, ID, classes);
}

private void setVars(double avgGPA, int ID, String[] classes) {
this.avgGPA = avgGPA;
this.ID = ID;
this.classes = classes;
}

我认为这与您所能获得的效率差不多,除非您想按照 QueenSvetlana 的回答建议创建一个静态初始化方法。

关于java 父类(super class)有多个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com