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

  • 相关阅读:
    [翻译] AAPullToRefresh
    [翻译] DKTagCloudView
    【转】Data URL和图片,及Data URI的利弊
    【转】C#获取当前日期时间(转)
    【转】Android的setTag
    【转】Android之Adapter用法总结
    【转】jpg png区别和使用
    【转】Android UI开发第三十一篇——Android的Holo Theme
    【转】android中的Style与Theme
    【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
  • 原文地址:https://www.cnblogs.com/guochang/p/9554172.html
Copyright © 2011-2022 走看看