继承,有什么建议我应该如何改进这个程序?

时间:2010-11-12 15:44:33

标签: java

public class Person{

private String name;
private String surname;
private int age;
private String address;

    Person(String n, String s, int a, String i){
    name = n;
    surname = s;
    age = a;
    address = i;

    this.name = name; this.surname= surname;
    this.age = age; this.address = address;

 }

    public String getName() {return name;}
    public String getSurname() {return surname;}
    public int getAge() {return age;}
    public String getAddress() {return address;}

    System.out.println(name+surname+age+address);

    Person(){
        this("Ryan","Borg",25,"Gudja");
    }
}

public class Student extends Person{
    int mark;
    String credits;

    Student(){
    }

    Student(String n, String s, int a, String i, int m, String c){
        super(n, s, a, i);
        mark = m;
        credits = c;

    public String getName() {return name;}
    public String getSurname() {return surname;}
    public int getAge() {return age;}
    public String getAddress() {return address;}
    public int getMark(){return mark;}
    public String getCredits() {return credits;}

    System.out.println(name+surname+age+address+mark+credits);

    }
 }

public class Teacher extends Person{
    int salary;
    String subject;

    Teacher(){
    }

    Teacher(String n, String s, int a, String i, int sal, String sub){
        super(n, s, a, i);
        salary = sal;
        subject = sub;

    public String getName() {return name;}
    public String getSurname() {return surname;}
    public int getAge() {return age;}
    public String getAddress() {return address;}
    public int getSalary(){return salary;}
    public String getSubject() {return subject;}

    System.out.println(name+surname+age+address+salary+subject);
    }
  }

4 个答案:

答案 0 :(得分:3)

  1. person子类具有不必要的getter,因为它们位于Person基类上。如果你做了不同的事情,你可以在子类上保留访问器,如果它们不同,但在这种特殊情况下它们不是。
  2. 避免使用'n'之类的变量名称。那应该是'名字'。在理性中冗长会导致更易读的代码。

答案 1 :(得分:0)

这是家庭作业吗?

无论如何,除了hvgotcodes之外,Person构造函数还有冗余代码。

name = n; this.name = name;不需要行。你只需要name = n;或者this.name = n;无论你的编码偏好是什么。

另外,为什么在类定义的中间有一个System.out.println?

为什么Person有默认构造函数创建默认Person?通常,这可以通过某种形式的Builder来完成,或者仅在测试代码中完成。对于生产代码没有价值。

子类没有将字段定义为private。它们只是默认的。这有明确的原因吗?他们应该是私人的。

答案 2 :(得分:0)

除了hvgotcodes建议覆盖toString()而不是System.out.println()

之外

答案 3 :(得分:0)

添加到hvgotcodes, 在Person classe的构造函数中,不需要将参数值赋给局部变量。

在person类中,你不能编写应该在某种方法中的sysout语句。

并且在Teacher ans Student的构造函数中,您已经定义了不应该的方法。并且不是必需的,因为它们存在于人物中。