zoukankan      html  css  js  c++  java
  • 重写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,编译器就会提示错误。

  • 相关阅读:
    (转)二步实现 远程连接 阿里云SqlServer 2012 数据库服务器
    浅谈C#在网络波动时防重复提交
    面向 Kubernetes 编程: Kubernetes 是下一代操作系统
    C#并行编程(2):.NET线程池
    C#并行编程(1):理解并行
    iOS 动画总结----UIView动画
    iOS开发之各种动画各种页面切面效果
    iOS动画效果和实现
    iOS开发动画(Animation)总结
    iOS开发之传感器
  • 原文地址:https://www.cnblogs.com/guochang/p/9554172.html
Copyright © 2011-2022 走看看