子类重写父类的方法应注意的问题

转载 2018年01月14日 10:15:50

参考:/hnd978142833/article/details/52200134

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求!

重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。)比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们的机会。出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的。

重写规则之二: 参数列表必须与被重写方法的相同。
重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。

重写规则之三:返回类型必须与被重写方法的返回类型相同。
父类方法A:void eat(){} 子类方法B:int eat(){}两者虽然参数相同,可是返回类型不同,所以不是重写。
父类方法A:int eat(){} 子类方法B:long eat(){}返回类型虽然兼容父类,但是不同就是不同,所以不是重写。

重写规则之四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
注意:这种限制只是针对检查异常,至于运行时异常RuntimeException及其子类不再这个限制之中。

重写规则之五: 不能重写被标识为final的方法。

重写规则之六:如果一个方法不能被继承,则不能重写它。如private方法
比较典型的就是父类的private方法。下例会产生一个有趣的现象。
//父类

class Animal {
   private voideat(){
    System.out.println("Animal is eating.");
    }
 }

//子类

class Horse extends Animal{
   public voideat(){
     System.out.println("Horse is eating.");
   }
}

//测试类

public class Test {
  public static void main(String[] args) {
   //Animal h =new Horse();
   Horse h = newHorse();
    h.eat();
   }
}


这段代码是能通过编译的。表面上看来违反了第六条规则,但实际上那是一点巧合。Animal类的eat()方法不能被继承,因此Horse类中的eat()方法是一个全新的方法,不是重写也不是重载,只是一个只属于Horse类的全新的方法!这点让很多人迷惑了,但是也不是那么难以理解。
main()方法如果是这样:
Animal h = new Horse();
//Horse h = new Horse();
h.eat();
编译器会报错,为什么呢?Horse类的eat()方法是public的啊!应该可以调用啊!请牢记,多态只看父类引用的方法,而不看子类对象的方法!

重写规则之七:子类不能用 静态方法 重写父类的非静态方法

编绎无法通过this static method cannot hide the instance mehtodfrom


class A {
  protected  int method1(int a,int b) {
  return 0;
 }
}

public class Test1 extends A {

 private int method1(int a, long b) {
  return 0;
 }
//this static method cannot hide the instance mehtod from A
   static public int method1(inta, int b) {
  return 0;
 }
}

重写规则之八:子类不能用非静态方法 重写 父类的静态方法

Java重写equals时应注意的问题汇总

1 在改写equals时要遵守通用约定 2 改写equals时同时改写hashCode
  • kingzone_2008
  • kingzone_2008
  • 2013年10月28日 22:46
  • 5742

子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。 (但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是...
  • geng_xue
  • geng_xue
  • 2014年09月01日 13:18
  • 1884

子类重写父类注意事项 java

转自:/wc0077/article/details/7269527 A、重写规则之一:     重写方法不能比被重写方法限制有更严格的访问级别。 ...
  • Hknock
  • Hknock
  • 2015年08月10日 21:00
  • 1103

子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。 (但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是...
  • geng_xue
  • geng_xue
  • 2014年09月01日 13:18
  • 1884

子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。 (但是可以更广泛,比如父类方法是包访问权限,子类...
  • nanaMasuda
  • nanaMasuda
  • 2016年09月24日 15:52
  • 217

java 子类重写父类的方法应注意的问题

java 子类重写父类的方法应注意的问题    若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A、重写规则之一:     重写方法不能比被重写方法限...
  • robbin2119
  • robbin2119
  • 2015年08月18日 22:53
  • 286

java 子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A、重写规则之一:     重写方法不能比被重写方法限制有更严格的访问级别。 (但是可以更广泛,比如父类方法是包访问权限,...
  • congcongsuiyue
  • congcongsuiyue
  • 2014年09月28日 11:16
  • 321

Java基础重温(六)子类与父类实例方法、静态方法的重写问题

一、慨况 本文讨论子类重写父类方法的问题。 子类分别有静态、实例方法,父类也分别有静态、实例方法,现在分四种情况: a.实例方法() 1.父类 package com.desmond.threa...
  • firemaple_li
  • firemaple_li
  • 2013年10月13日 16:05
  • 792

子类重写父类的方法注意事项

继承在Java开发中是最常用的一种方法,也是在面试过程中最普通的一部分,子类继承父类,可以调用父类的方法和属性,也可以根据实际情况重写父类的方法,满足真觉得业务需求,但在实际的应用子类重写父类的方法要...
  • wuygyu
  • wuygyu
  • 2016年03月16日 15:27
  • 294

关于 WCF 基础连接已经关闭 连接被意外关闭-不是使用父类指向子类问题

  • 2013年10月25日 23:49
  • 17KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:子类重写父类的方法应注意的问题
举报原因:
原因补充:

(最多只允许输入30个字)