如何使toString()方法还返回超类私有字段及其实例字段?

赛纳特SR

有没有一种方法可以toString()包含超级的私有字段class我尝试添加super.toString(),但是没有用。

请看下面的代码

Employee.java

package test;

public class Employee {

private  String name;
private int id;
private double salary;

public Employee(String name, int id, double salary) {
    super();
    this.name = name;
    this.id = id;
    this.salary = salary;
}

public double getSalary() {
    return salary;
}

@Override
public String toString() {
    return "Employee [name=" + name + ", id=" + id + ", salary=" + salary
            + "]";
}

public static void main(String[] args) {

    Employee e=new Employee("Joe", 14, 5000);
    System.out.println(e);
    Manager m=new Manager("Bill", 23, 5000, 10);
    System.out.println(m);
    System.out.println("Employee Salary is "+e.getSalary()+"\nManager salary is "+m.getSalary());
}
}

管理器

package test;

public class Manager extends Employee{

private double bonus;
public Manager(String name, int id, double salary,int bonus) {
    super(name, id, salary);
    this.bonus=bonus;
}

public double getSalary()
{
    double baseSalary=super.getSalary();

    return (baseSalary+baseSalary*(bonus/100));

}

@Override
public String toString() {
    return(this.getClass().getName()+" ["+super.toString().substring((this.getClass().getSuperclass().getName().length()-3
            ), (super.toString().length())-1)+", bonus="+bonus+"]");
    //didn't work
    //super.toString();
    //return "Manager [bonus=" + bonus + "]";
}



}

输出

Employee [name=Joe, id=14, salary=5000.0]
test.Manager [name=Bill, id=23, salary=5000.0, bonus=10.0]
Employee Salary is 5000.0
Manager salary is 5500.0

这是我能做的最好的,连接super.toString()+一组字符串,这肯定是一团糟,是否还有其他方法,即使语言规范不允许它确实有蚀的能力,注意:使用eclipse生成toString方法,通过任何方式,我可以告诉eclipse也包括超类字段,

换句话说,我可以取代这个凌乱的代码

return(this.getClass().getName()+" ["+super.toString().substring((this.getClass().getSuperclass().getName().length()-3
            ), (super.toString().length())-1)+", bonus="+bonus+"]");

通过让Eclipse自动化过程并生成合适的方法来做到这一点?

利亚姆·德·哈斯(Liam de Haas)

如果在超类中创建getter和setter,则可以通过这些方法访问变量。另一种可能性是将可见性从私有更改为受保护

第一个解决方案看起来像这样

员工

public class Employee {

    private String name;
    private int id;
    private double salary;

    public Employee(String name, int id, double salary) {
        super();
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", id=" + id + ", salary=" + salary + "]";
    }
}

经理

public class Manager extends Employee {

    private double bonus;

    public Manager(String name, int id, double salary, int bonus) {
        super(name, id, salary);
        this.bonus = bonus;
    }

    public double getSalary() {
        double baseSalary = super.getSalary();

        return (baseSalary + baseSalary * (bonus / 100));

    }

    @Override
    public String toString() {
        return "Manager [name=" + getName() + ", id=" + getId() + ", salary=" + getSalary() + ", bonus=" + bonus + "]";
    }

}

第二个(使用保护)

员工

public class Employee {

    protected String name;
    protected int id;
    protected double salary;

    public Employee(String name, int id, double salary) {
        super();
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }



    @Override
    public String toString() {
        return "Employee [name=" + name + ", id=" + id + ", salary=" + salary + "]";
    }
}

经理

public class Manager extends Employee {

    protected double bonus;

    public Manager(String name, int id, double salary, int bonus) {
        super(name, id, salary);
        this.bonus = bonus;
    }

    public double getSalary() {
        double baseSalary = super.getSalary();

        return (baseSalary + baseSalary * (bonus / 100));

    }

    @Override
    public String toString() {
        return "Manager [name=" + name + ", id=" + id + ", salary=" + salary + ", bonus=" + bonus + "]";
    }

}

我个人会使用getter / setter方法,但这取决于您。

编辑:toString()在eclipse中的eclipse的补充您似乎无法使用getters和setter生成它(只是快速浏览,您可以在此处看到一些文档。我所做的工作是弄清楚如何编辑生成代码模板时使用的代码模板,toString()因此它包括toString()超类中的。

当您进入generate toString()对话框时,<Default Template>旁边有一个字段“ String Format” 当您单击编辑按钮时,您可以创建一个新的代码模板。该模板会自动保存<Default Template>和,看起来应该像这样:

${object.className} [${member.name()}=${member.value}, ${otherMembers}]

最后,您只需要添加以下内容

[super: ${object.superToString}]

这样它将显示toString()超类形式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何恢复腌制的类及其实例

来自分类Dev

如何从基类的实例创建派生类的实例并包含私有字段?

来自分类Dev

子类中的私有字段可在超类中访问

来自分类Dev

使用 mockito 在抽象超类中设置私有字段

来自分类Dev

在Java中,允许子类通过公共setter方法更改超类私有字段是否正确?

来自分类Dev

如何从父类访问私有字段

来自分类Dev

如何枚举私有JavaScript类字段

来自分类Dev

Python私有类字段,如何制作?

来自分类Dev

PHP:获取类的私有字段列表(不是实例!)

来自分类Dev

如何使超类方法返回子类的实例

来自分类Dev

如何在不使用 setter 的情况下从子类访问超类中的私有字段?

来自分类Dev

为嵌套类查找所有私有字段及其相应的 getter/setter

来自分类Dev

如何为具有私有字段的类编写junit?

来自分类Dev

如何使acornjs正确样式化检查私有类字段和方法?

来自分类Dev

Java:如何使私有字段Map在类中不可变?

来自分类Dev

如何使嵌套类中的字段真正私有?

来自分类Dev

如何在派生类中重写`toString`并使用基类中的私有实例变量?

来自分类Dev

类持有作为私有成员指向其实例的指针的原因是什么?

来自分类Dev

父类中的私有字段-Java

来自分类Dev

匿名类和外部私有字段

来自分类Dev

何时在类中定义私有字段

来自分类Dev

访问类模块中的私有字段

来自分类Dev

Javascript显示模块,返回私有字段

来自分类Dev

如何从字段生成toString()方法?

来自分类Dev

如何从其实例变量访问类的实例

来自分类Dev

为带有可选参数的最终私有字段设置默认实例的最佳方法是什么?

来自分类Dev

没有私有方法访问私有字段?

来自分类Dev

如何在scala中访问子类实例中的超类字段?

来自分类Dev

访问超类字段

Related 相关文章

  1. 1

    如何恢复腌制的类及其实例

  2. 2

    如何从基类的实例创建派生类的实例并包含私有字段?

  3. 3

    子类中的私有字段可在超类中访问

  4. 4

    使用 mockito 在抽象超类中设置私有字段

  5. 5

    在Java中,允许子类通过公共setter方法更改超类私有字段是否正确?

  6. 6

    如何从父类访问私有字段

  7. 7

    如何枚举私有JavaScript类字段

  8. 8

    Python私有类字段,如何制作?

  9. 9

    PHP:获取类的私有字段列表(不是实例!)

  10. 10

    如何使超类方法返回子类的实例

  11. 11

    如何在不使用 setter 的情况下从子类访问超类中的私有字段?

  12. 12

    为嵌套类查找所有私有字段及其相应的 getter/setter

  13. 13

    如何为具有私有字段的类编写junit?

  14. 14

    如何使acornjs正确样式化检查私有类字段和方法?

  15. 15

    Java:如何使私有字段Map在类中不可变?

  16. 16

    如何使嵌套类中的字段真正私有?

  17. 17

    如何在派生类中重写`toString`并使用基类中的私有实例变量?

  18. 18

    类持有作为私有成员指向其实例的指针的原因是什么?

  19. 19

    父类中的私有字段-Java

  20. 20

    匿名类和外部私有字段

  21. 21

    何时在类中定义私有字段

  22. 22

    访问类模块中的私有字段

  23. 23

    Javascript显示模块,返回私有字段

  24. 24

    如何从字段生成toString()方法?

  25. 25

    如何从其实例变量访问类的实例

  26. 26

    为带有可选参数的最终私有字段设置默认实例的最佳方法是什么?

  27. 27

    没有私有方法访问私有字段?

  28. 28

    如何在scala中访问子类实例中的超类字段?

  29. 29

    访问超类字段

热门标签

归档