您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

如果您在超类中创建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()在日食的日蚀的补充。您似乎无法使用getters和setter生成它(只是快速浏览,您可以在此处看到一些文档。我所做的工作是弄清楚如何编辑生成代码模板时使用的代码模板,toString()因此它包括toString()超类中的。

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

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

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

[super: ${object.superToString}]

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

其他 2022/1/1 18:36:07 有479人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶