假设我有Person(String name)和Student(String name,String course),它扩展了Person。
在学生上覆盖toString()时,什么被认为更好?
return super.toString() + " course: " + course;
//or
return "name: " + name + " course: " + course;
答案 0 :(得分:4)
它根本不重要,但它归结为你想要学生和人的关系。如果您希望学生的%s
方法始终为NotificationManager
,那么当您修改学生的select t.col1
,t.col2
,first_value(lag_col2) over (partition by col2 order by ord) lag_col2
from (select t.*
,case when lag_col2 = col2 then 1 else 0 end ord
from (select t.*
,lag (col2) over (order by col1) lag_col2
from table1 t
)t
)t
order by col1
人员的toString()
时,请确保这样做是可行的。但是,如果您希望学生的super.toString() + " course: " + course
不依赖于人员toString()
,则不要包含对Super的调用。
答案 1 :(得分:1)
第二种方法super.toString()
并不好。因为toString()
可以返回除name
以外的任何其他内容。在你的情况下,第一个会更好。但是,使用super.toString()
并不会有任何问题,只要您确定它只返回name
并且永远都会。但我更愿意使用第一种方法。
答案 2 :(得分:1)
return super.toString() + " course: " + course;
这两个选项几乎同样好。但是,从维护角度来看,第一个是更好的设计,如果要将新属性添加到Person类说地址,请考虑将来的场景。然后,您使用第一个选项,您可以避免在两个地方更新。通过选项一,更新Person的String方法也会在Students toString中添加新属性。
P.S。 : - 考虑使用StringBuilder而不是串联字符串。