方法重写,即方法的重新改写,是为了更准确地描述子类的行为特征
比如
public class Father {
String name ="jim";
String address;
protected int listen(int a,int b) {
System.out.println("正在用收音机听广播...");
return 0;
}
}
public class Son extends Father {
@Override
protected int listen(int a,int b) {
System.out.println("正在用手机听广播...");
return 0;
}
}
即为子类对父类方法的重写
在重写的方法上加@Override,表示重写
关于重写需要注意几点,若不符合,则错误或者不叫重写
1.方法访问权限
重写后的方法其访问权限必须与父类相同或比父类范围更大
由大到小的排序为:public protected 默认的(即为空) private
如上面给出的例子
若子类改为
public class Son extends Father {
@Override
int listen(int a,int b) {
System.out.println("正在用手机听广播...");
return 0;
}
}
则错误,因为子类重写的方法访问权限比父类小
2.修饰词
a、父类方法前加final修饰,则不可以被重写(会被继承)
public class Father {
String name ="jim";
String address;
protected final int listen(int a,int b) {//加final不能被重写
System.out.println("正在用收音机听广播...");
return 0;
}
}
若将父类方法改变如此,则子类报错。
b、父类方法前加static修饰,则不可以被重写(会被继承)
形式同上
c、子类重写方法不可以加static修饰
3.返回值类型
若父类返回值类型为void或基本数据类型,子类重写方法返回值类型必须与父类相同
如开始举例,子类改为任何非int返回值,都是错误的
若父类返回值类型为引用类型,则子类返回值类型必须与父类一致或为父类返回值类型的子类
public class Father {
String name ="jim";
String address;
protected Object listen(int a,int b) {
System.out.println("正在用收音机听广播...");
return "0";
}
}
public class Son extends Father {
@Override
protected String listen(int a,int b) {//String是Object子类,正确
System.out.println("正在用手机听广播...");
return "0";
}
}
4.方法名必须相同
5.参数列表除参数名可以不同,参数个数,类型都必须相同
开始时的子类
public class Son extends Father {
@Override
protected int listen(int a,int b) {//(int c,int d)正确;(int a)错误;(long a,int b) 错误
System.out.println("正在用手机听广播...");
return 0;
}
}