重写:子类继承父类某一方法,有相同的方法名,参数,称为重写。
重载:子类继承父类某一方法,方法名相同,但是参数不同,称为重载。
能与public void m1(){}形成重载的有哪些(c e f)
a.private void m1(){} //无法通过返回值来重载
b.private int m1(){
return 1;
}
c.public void m1(int i){}
d.public void m1() throws exception{}
e.public void m1(int... i){}
f.public void m1(int[] i){}
e中的参数是可变的,其实质上是一个参数数组
重写应该遵循的规则:
1.参数列表必须与被重写的方法一致
package com.htxx.action.JAVA;
public class SuperClass {
public void m1(){
}
}
class SonClass extends SuperClass{
@Override
//The method m1(int) of type SonClass must override or implement a supertype method
public void m1(int i) {
// TODO Auto-generated method stub
super.m1();
}
}
2.返回类型必须与被重写方法的返回类型相同
package com.htxx.action.JAVA;
public class SuperClass {
public void m1(){
}
}
class SonClass extends SuperClass{
@Override
//报错 The return type is incompatible with SuperClass.m1()
public int m1() {
// TODO Auto-generated method stub
super.m1();
}
}
3,.重写方法不能比被重写方法有更严格的访问级别
package com.htxx.action.JAVA;
public class SuperClass {
protected void m1(){
}
}
class SonClass extends SuperClass{
@Override
//报错 Cannot reduce the visibility of the inherited method from SuperClass
void m1() {
// TODO Auto-generated method stub
super.m1();
}
}
4.不能重写被标识为final的方法
package com.htxx.action.JAVA;
public class SuperClass {
final void m1(){
}
}
class SonClass extends SuperClass{
@Override
//报错 Cannot override the final method from SuperClass
void m1() {
// TODO Auto-generated method stub
super.m1();
}
}
5.重写方法不能抛出新的异常或者比被重写方法生命的检查异常更广的检查异常。
package com.htxx.action.JAVA;
public class SuperClass {
public void m1(){
}
}
class SonClass extends SuperClass{
@Override
//报错Exception Exception is not compatible with throws clause in SuperClass.m1()
public void m1() throws Exception{
// TODO Auto-generated method stub
super.m1();
}
}