关于#java#的问题:子类tostring怎么输出父类的私有属性和它自己的属性


abstract class employee1{
private String name;    
private String num;
private Mydate birthday;
abstract int earnings();
public String toString()
{
    return "姓名:"+name+","+"工号:"+num+","+"生日:"+birthday.toDateString();
}
    
}
class SalariedEmployee extends employee1{
    private int monthlysalary;
    public int earnings() {
        return monthlysalary;
    }
    public String toString()
    {
      
    }
}

子类tostring怎么输出父类的私有属性和它自己的属性

可以在父类封装一个方法给子类调用,

父类属性加上get方法,子类toString调用直接打印

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7751376
  • 除此之外, 这篇博客: Java中toString方法的推荐实现方式中的 利用模板方法的设计模式实现toString更好的继承性 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 让子类可以更好的继承和打印自己的属性,可以采用模板方法的设计模式实现。在父类中新建一个createToStringBuilder(可以是其他名称,但是最好不要以get开头)的保护方法,创建和返回一个ToStringBuilder对象,包含当前类的所有属性;重写toString方法,调用this.createToStringBuilder().toString()。子类继承父类,只要重写createToStringBuilder方法,调用父类的createToStringBuilder方法继续append添加子类的属性即可,不必再次重写toString方法。

    示例:

    父类BaseResponse中:

        /**
         * 构造ToStringBuilder
         *
         * @return ToStringBuilder
         */
        protected ToStringBuilder createToStringBuilder() {
            return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
                    .append("retCode", retCode)
                    .append("msg", msg);
        }
    
        @Override
        public String toString() {
            return this.createToStringBuilder().toString();
        }

    子类GetUserInfoResponse继承BaseResponse,重写createToStringBuilder方法:

        @Override
        protected ToStringBuilder createToStringBuilder() {
            return super.createToStringBuilder().append("user", user);
        }

    结束语:有很多好的开源框架值得我们学习和使用,其中Apache Commons是佼佼者,使用开源框架和学习他们的各种实现,可以使你更快的进步。

  • 您还可以看一下 李兴华老师的java核心技术精讲课程中的 toString()方法小节, 巩固相关知识点