基类和子类构造函数问题

Inv*_*r22 1 java constructor class

在过去的几天里,我一直在尝试使用Java中的Classes,从youtube上的"TheNewBoston"和java文档中了解它们.

我已经创建了以下场景,并就我的一些问题寻求你们的(女孩们)专业批评和深入了解.

有两个类,person和person_financial,分别是基类和子类.

人类:

public class person {

private String name;
private String sex;
private int age;
private double height;
private double weight;
private double intelligence;

// person constructor arguments order: name, height, weight, age, sex, intelligence
public person(){
    this("noname",0,0,0,"undefined",5);
}
public person(String n){
    this(n,0,0,0,"undefined",5);
}
public person(String n, double h){
    this(n,h,0,0,"undefined",5);
}
public person(String n, double h, double w){
    this(n,h,w,0,"undefined",5);
}
public person(String n, double h, double w, int a){
    this(n,h,w,a,"undefined",5);
}
public person(String n, double h, double w, int a, String s){
    this(n, h, w, a, filterSex(s), 5);
}
public person(String n, double h, double w, int a, String s, double i){
    name = n;
    height = h;
    weight = w;
    age = a;
    sex = filterSex(s);
    intelligence = i;
}

public void setName(String n){
    name = n;
}
public void setHeight(double h){
    height = h;
}
public void setWeight(double w){
    weight = w;
}
public void setAge(int a){
    age = a;
}
public void setSex(String s){
    sex = filterSex(s);
}
public void setIntel(double i){
    intelligence = i;
}

public String getName(){
    return name;
}
public double getHeight(){
    return height;
}
public double getWeight(){
    return weight;
}
public int getAge(){
    return age;
}
public String getSex(){
    return sex;
}
public double getIntel(){
    return intelligence;
}

public String getInfo(){
    return String.format("Name: %s,\nSex: %s,\nAge: %d,\nIntelligence: %.2f,"
            + "\nHeight: %.2f,\nWeight: %.2f\n", name, sex, age,
            intelligence, height, weight);
}

private static String filterSex(String s){
    return ((s.equalsIgnoreCase("male") ||
             s.equalsIgnoreCase("female")) ? s : "undefined");
}
}
Run Code Online (Sandbox Code Playgroud)

person_financial类:

public class person_financial extends person {

private double monies = 0;

public void definePerson(String n, int a, String s, double i, double h, double w){
    setName(n);
    setAge(a);
    setSex(s);
    setIntel(i);
    setHeight(h);
    setWeight(w);
}

public person_financial() {
    this(0);
}

public person_financial(double m) {
    monies = m;
}

public void depositMonies(double m) {
    monies += m;
}

public void withdrawlMonies(double m) {
    if (m <= monies) {
        monies -= m;
    }
}

public double getBalance() {
    return monies;
}
}
Run Code Online (Sandbox Code Playgroud)

然后在主要课程中我有这个:

public class Main {

public static void main(String[] args) {

    person p1 = new person("I have no Name", 180, 72, 38, "Alien", 7.2);
    System.out.println(p1.getName());


    person_financial pf1 = new person_financial(100.00);
    pf1.depositMonies(50.02);
    System.out.printf("%s has %.2f monies.\n", pf1.getName(), pf1.getBalance());

    pf1.definePerson("some_name", 42, "male", 10, 180, 72);
    System.out.println(pf1.getInfo());
}
}
Run Code Online (Sandbox Code Playgroud)

在person_financial类中,我创建了一个名为"definePerson()"的方法,我用它来定义本来可以从'person'类的'person()'构造函数定义的所有特征.我确信有一种更专业的方法可以从子类中为基类中的变量赋值,我只是不知道任何...

另外,有没有办法从"person"类调用构造函数来定义'pf1'的特征?而不是必须,例如,手动设置每个属性,即pf1.setName("something"); ,或pf1.setAge(1000000); 等...或者有一个方法为我做,如'definePerson()'.

非常感谢任何帮助,谢谢=).

Ree*_*ore 5

您可以使用该super()调用来调用父类的构造函数.它必须是派生类的构造函数中的第一个调用,但是你像任何其他函数一样调用它(并传入参数),它将以这种方式调用构造函数.

  • 谢谢!我在子类的构造函数中添加了"super(<parameters>)",一切正常,就像我想要的那样! (2认同)