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

  • 相关阅读:
    2-3 vue配置介绍
    2-2 vue环境搭建以及vue-cli使用
    2-1 nodejs和npm的安装和环境搭建
    Babel
    vue-resource使用 (vue仿百度搜索)
    Google浏览器清除缓存快捷键
    browsersync即时刷新页面
    【高可用HA】Apache (2) —— Mac下安装多个Apache Tomcat实例
    【高可用HA】Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)
    Apache CXF实现Web Service(5)—— GZIP使用
  • 原文地址:https://www.cnblogs.com/guochang/p/9554172.html
Copyright © 2011-2022 走看看