zoukankan      html  css  js  c++  java
  • 章节五、7-方法的重写

    一、重写

     子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写,方法重写又称方法覆盖。

    二、案例演示

    1、新建一个类名为CarsOverridingParent的类,用作父类

    package introduction7;
    
    public class CarsOverridingParent {
        
            public void engineStart(int cly) {
                System.out.println("这是父类。。。");
            }
    }

    2、新建一个类名为CarsOverridingBMW的类,继承CarsOverridingParent,用于对父类中的方法进行重写

    package introduction7;
    /*
         重写的注意事项:
         1、子类在重写父类里方法是时,参数列表要求一模一样
         2、子类方法覆盖父类方法,必须要保证权限大于等于父类权限
         3、private 和 final 修饰的方法不能被覆盖,
               因为私有只能本类访问,被final修饰的都是常量,
               覆盖只发生在方法上,成员变量是不可能存在覆盖的。
         4、static关键字,静态只能覆盖静态,或者被静态覆盖,
               静态方法是不属于对象的,属于类。
     */
    public class CarsOverridingBMW extends CarsOverridingParent{
    
        public static void main(String[] args) {
    
        }
    
    }

    3、子类重写父类中的方法

    package introduction7;
    
    import javax.crypto.Cipher;
    
    /*
         重写的注意事项:
         1、子类在重写父类里方法是时,参数列表要求一模一样
         2、子类方法覆盖父类方法,必须要保证权限大于等于父类权限
         3、private 和 final 修饰的方法不能被覆盖,
               因为私有只能本类访问,被final修饰的都是常量,
               覆盖只发生在方法上,成员变量是不可能存在覆盖的。
         4、static关键字,静态只能覆盖静态,或者被静态覆盖,
               静态方法是不属于对象的,属于类。
    */
    public class CarsOverridingBMW extends CarsOverridingParent{
        
        //@表示为此方法添加注解,override表示此方法为重写方法
        @Override
        public void engineStart(int cly) {
            System.out.println("这是子类。。。");
        }
        
        public static void main(String[] args) {
        //实例化对象
            CarsOverridingBMW c1 = new CarsOverridingBMW();
        //调用类中的重写方法
            c1.engineStart(2);
        }
    
    }

    结果为:

    4、在子类中重写父类方法的同时使用关键字super调用父类中的该方法

    结果为:

    三、重写方法的优势

    在父类基础上进行功能的扩展,加入子类特有的功能,父类中已经定义的功能,子类可以直接拿来用,如果子类想对功能的内容有自己的定义的话,子类可以保留父类功能的声明(声明指方法名同父类方法名一致),然后建立子类特有的功能。

    四、多态

    父类类型的引用来指上子类

    1、在父类中新建一个方法

    2、子类中访问调用

    package introduction7;
    
    import javax.crypto.Cipher;
    
    /*
         重写的注意事项:
         1、子类在重写父类里方法是时,参数列表要求一模一样
         2、子类方法覆盖父类方法,必须要保证权限大于等于父类权限
         3、private 和 final 修饰的方法不能被覆盖,
               因为私有只能本类访问,被final修饰的都是常量,
               覆盖只发生在方法上,成员变量是不可能存在覆盖的。
         4、static关键字,静态只能覆盖静态,或者被静态覆盖,
               静态方法是不属于对象的,属于类。
    */
    public class CarsOverridingBMW extends CarsOverridingParent{
        
        //@表示为此方法添加注解,override表示此方法为重写方法
        @Override
        public void engineStart(int cly) {
        //    super.engineStart(2);
            System.out.println("这是子类。。。");
        }
        
        public static void main(String[] args) {
        //实例化对象
        //    CarsOverridingBMW c1 = new CarsOverridingBMW();
        //调用类中的重写方法
        //    c1.engineStart(2);
            
        //父类类型的引用指向父类,调用重写方法时调用的都是父类中的方法,无法调用子类
            CarsOverridingParent c2 = new CarsOverridingParent();
        //打印结果为“这是父类。。。”
            c2.engineStart(2);
        //打印结果为“这是父类里面increaseSpeed”
            c2.increaseSpeed();
        
        //父类类型的引用指向子类,既可以调用父类中的方法,也可以调用子类中的方法
            CarsOverridingParent c3 = new CarsOverridingBMW();
        //打印结果为“这是子类。。。”
            c3.engineStart(2);
        //打印结果为“这是父类里面increaseSpeed”
            c3.increaseSpeed();
        }
    
    }
  • 相关阅读:
    ExecutorService 和 NSOperationQueue
    Android 中的AsyncTask
    正则表达式里"-"中划线的使用注意
    Android studio 程序升级和sdk manager 升级方法
    推荐一篇java抽象类和接口区别的文章
    Android measure和layout的一点理解
    Android 屏幕旋转
    Android 中的openurl
    UML 序列图一点理解
    Android Studio中的Module,Facet
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9567218.html
Copyright © 2011-2022 走看看