重写override
不可重写私有方法。
不可重写非静态的方法,虽然编译器不会报错,但是得不到预期的结果。
可以通过重写的形式对父类的功能进行重新定义,比如:对功能进行修改或者进行升级时。
public void showMsg(){
System.out.println("BaseAction.showMsg");
}
public void getName(){
System.out.println("BaseAction.getName:张三");
}
}
class Main{
public static void main(String[] args){
BaseAction b = new BaseAction();
b.showMsg();
b.getName();
}
}
运行结果:
BaseAction.showMsg
BaseAction.getName:张三
现在在Main类中调用BaseActiond的showMsg方法需要改造,但是showMsg方法在其余的地方也用到了,不可直接改变showMsg中的代码,这个时候就需要用重写。
public void showMsg(){
System.out.println("BaseAction.showMsg");
}
public void getName(){
System.out.println("BaseAction.getName:张三");
}
}
class UserAction extends BaseAction{
public void showMsg(){
System.out.println("UserAction.showMsg");
}
}
class Main{
public static void main(String[] args){
//BaseAction b = new BaseAction();
UserAction b = new UserAction();
b.showMsg();
b.getName();
}
}
运行结果:
UserAction.showMsg
BaseAction.getName:张三
重写后的代码,在Main类中并不影响getName,只对showMsg方法做了改变。
@Override的用法
@Override是伪代码,写和不写都可以,不过写上还是有很多好处的,可以很清楚的看出这个是重写方法,而且编译器也会验证该方法在父类中是否存在。当你想重写一个方法时,但是没有写上@Override,如果方法名称或者参数写错了,编译器也不会报错,会认为这是子类中定义的一个方法或是在重载一个方法。
public void findAll(String name){
System.out.println("BaseAction.findAll");
}
}
class UserAction extends BaseAction{
@Override
public void findAll(String name){
System.out.println("UserAction.findAll");
}
}
public void findAll(String name){
System.out.println("BaseAction.findAll");
}
}
class UserAction extends BaseAction{
public void findAll(int name){
System.out.println("UserAction.findAll");
}
}
class Main{
public static void main(String[] args){
UserAction u = new UserAction();
u.findAll("1");
u.findAll(1);
}
}
运行结果:
BaseAction.findAll
UserAction.findAll
如果在UserAction中的findAll()方法上不加上@Override,编译器也不会报错,但是变成了方法重载。如果在UserAction中的findAll()方法上加上@Override,编译器就会提示错误。

浙公网安备 33010602011771号