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)。

posted @ 2016-07-25 21:00  xingzhui  阅读(389)  评论(0编辑  收藏  举报