重写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,编译器就会提示错误。

猜你喜欢

转载自www.cnblogs.com/guochang/p/9554172.html
今日推荐