一、方法重写
方法重写也叫方法覆盖,需要满足下面的条件
重写是子类对==父类的允许访问的方法==的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
这里可以解释为什么 private 方法不能被重写,因为private 方法不能被子类访问。
子类的方法==参数,方法名==,要和父类的参数,方法名称完全一样。
- 参数(个数/类别,顺序都要一样),==否则就是方法的多态==,而不构成重写!
子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。
eg: 父类返回的类型是Object,子类方法返回类型是 String
正确—->public Object getinfo() public String getinfo()
错误举例
- ```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 type1
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'
- ```java
默认—-> public public>protected> 默认> private
总结
- 方法重写时,需要注意两个重要点,1是访问权限,2.返回类型,不同则报错。最后一个为参数,如果不同则只是方法的重载。
- private 修饰的方法不能被重写,因为 在重写的概念中,需要 是 子类具有的父类的允许访问方法。private 修饰了那前提条件就不满足了。
- static 修饰的方法也==不会被覆盖==。