Java Super 覆盖方法
子类从父类中继承方法,有时候,子类需要修改父类中定义的方法的实现,这称作方法覆盖。
比如,GeometricObject类中的toString方法返回表示集合对象的字符串,这个方法就可以被覆盖,返回表示圆的字符串。
1 public String toString(){
2 return super.toString()+"\nradius is "+radius;
3 }
要在Circle类中调用定义在GeometricObject中的toString方法,使用super.toString()。
需要注意的是:
1、仅当实例方法是可访问时,它才能被覆盖。因为私有方法不能在它的类之外被访问。如果子类中定义的方法在父类中是私有的,那么这两个类完全没有关系。
2、静态方法能被继承,但是不能被覆盖。如果父类中定义的静态方法在子类中被重新定义,那么定义在父类中的静态方法将被隐藏,使用 父类名.静态方法名 调用隐藏的静态方法。
另外,说一下Object类中equals的方法的默认实现和覆盖方法:
1 public boolean equals(Object obj){ 2 return (this==obj); 3 }
这个方法使用==运算符检测两个引用变量是否指向同一个对象,因此,应该在自己的客户类中覆盖这个方法,以测试两个不同的对象是否具有相同的内容。比如基于元的半径比较两个圆是否相等,如下所示:
1 public boolean equals(Object obj){ 2 if(obj instanceof Circle){ 3 return radius==((Circle)obj).radius; 4 } 5 else 6 return false; 7 }
这时,需要注意的是,覆盖equals方法时,必须使用equals(Object obj)。
如果您觉得感兴趣的话,可以添加我的微信公众号:一步一步学Python
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步