一、方法重写

方法重写也叫方法覆盖,需要满足下面的条件

重写是子类对==父类的允许访问的方法==的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

这里可以解释为什么 private 方法不能被重写,因为private 方法不能被子类访问。

  1. 子类的方法==参数,方法名==,要和父类的参数,方法名称完全一样。

    1. 参数(个数/类别,顺序都要一样),==否则就是方法的多态==,而不构成重写!
  2. 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。

    1. eg: 父类返回的类型是Object,子类方法返回类型是 String

      1. 正确—->public Object getinfo() public String getinfo()

      2. 错误举例

        1. ```java
          class hello{
          public String say (String name){}
          }
          class t extends hello{
          public Object say(String age){

          }
          }
          error:
          say(String)’ in ‘com.jhfuture.object.Person.t’ clashes with ‘say(String)’ in ‘com.jhfuture.object.Person.hello’; attempting to use incompatible return type
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
                
          3.

          3. 子类方法不能缩小父类方法的==访问权限==
          1. 父类: void sayOk() 子类:public void sayOk()

          1. ```java
          class hello{
          public void say (String name){}
          }
          class t extends hello{
          private void say(String age){

          }
          }
          }
          --->报错
          erro: 'say(String)' in 'com.jhfuture.object.Person.t' clashes with 'say(String)' in 'com.jhfuture.object.Person.hello'; attempting to assign weaker access privileges ('private'); was 'public'
    2. 默认—-> public public>protected> 默认> private

总结

  1. 方法重写时,需要注意两个重要点,1是访问权限,2.返回类型,不同则报错。最后一个为参数,如果不同则只是方法的重载。
  2. private 修饰的方法不能被重写,因为 在重写的概念中,需要 是 子类具有的父类的允许访问方法。private 修饰了那前提条件就不满足了。
  3. static 修饰的方法也==不会被覆盖==。