• 面向对象-继承类的特点


                   面向对象-继承类的特点

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

     

     

    一.继承中成员变量的特点

      super和this的用法相同:
        (1)this代表本类的引用;
        (2)super代表父类的引用;

      this可以用来区分局部变量和成员变量重名的情况.

      super可以用来区分子父类中的成员.

      子类要调用父类构造函数时,可以使用super语句.
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义父类
     * @author 尹正杰
     *
     */
    public class Father {
        int money = 5000000;
        
        public void showMoney() {
            System.out.println("Father has " + money + " 人名币");
        }
        
    }
    Father.java
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义子类
     * @author 尹正杰
     *
     */
    public class Son extends Father {
        
        int money = 1000000;
        
        /*
         *     当子父类中出现同名的成员变量时,为了区分着两个变量,在子类中用this调用的时子类的变量,在子类中用super调用的时父类的变量。
         * 
         *     this代码 是本类对象的引用,super代表的是父类的存储空间。
         * 
         *     综上所述,this可用用来区分局部变量和成员变量重名的情况,super可以用来区分子父类中成员变量重名的情况。
         * 
         *     温馨提示:
         *         虽然上面提到了变量重名的解决方案,但实际生产开发环境中,应该尽量不要出现变量名重名的情况哟~
         */
        public void showMoney() {
            
            int money = 3000000;
            
            System.out.println("Son has " +(this.money + super.money) + " 人名币");
        }
        
    }
    Son.java
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     测试继承类
     * @author 尹正杰
     *
     */
    public class ExtendDemo {
    
        public static void main(String[] args) {
            Son son = new Son();
            
            son.showMoney();
            
        }
    }
    ExtendDemo.java

    二.继承中成员函数的特点

      子类中出现与父类一模一样的方法时,会出现覆盖操作(override),也称为重写或者复写。
    
      父类中的私有方法不可以被覆盖。
    
      在子类覆盖方法中,继续使用被覆盖的方法可以通过"super.函数名"获取。
    
      覆盖注意事项:
        覆盖时,子类方法权限一定要大于等于父类方法权限;
        静态只能覆盖静态;
    
      覆盖的应用:
        当子类需要父类的功能,而功能主体子类有自建特有内容时,可以复写父类中的方法,这样既沿袭了父类的功能,又定义了子类特有的内容。
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义父类
     * @author 尹正杰
     *
     */
    public class Father {
        int money = 5000000;
        
        void showMoney() {
            System.out.println("Father has " + money + " 人名币");
        }
        
    }
    Father.java
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义子类
     * @author 尹正杰
     *
     */
    public class Son extends Father {
        
        int money = 1000000;
        
        /*
         *    子父类中成员函数的特点:
         *           当子父类出现一模一样的函数时,子类对象在调用该函数时,运行的是子类中的函数,父类中的函数会被子类的
         *    函数所覆盖(重写,复写,override),这和我们之前学习过另外一个函数的特性重载(overload)有所不同。
         *    
         */
        void showMoney() {
            /*
             *     因为子父类中均出现了同名的方法,为了区分,可以使用super关键字完成
             */
            super.showMoney();
            
            int money = 3000000;
            System.out.println("Son has " + money + " 人名币");
        }
        
    }
    Son.java
    package cn.org.yinzhengjie.extemdPackage;
    /**
     *     测试继承类
     * @author 尹正杰
     */
    public class ExtendDemo {
        
        public static void main(String[] args) {
            Son son = new Son();
            son.showMoney();
        }
    }
    ExtendDemo.java

    三.继承中构造函数的特点

      子类中所有的构造函数默认都会访问父类中空参数的构造函数;
    
      因为在子类中每个构造函数的第一行都有默认的语句super();
    
      子类会继承父类中的数据,所以要先明确父类是如何对这些数据初始化的;
    
      当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义父类
     * @author 尹正杰
     *
     */
    public class Father {
        
        Father() {
            System.out.println("Father 空参构造函数...");
        }
        
        Father(int money) {
            System.out.println("Father 有参构造函数..." + money + "万");
        }
    }
    Father.java
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     定义子类
     * @author 尹正杰
     *
     */
    public class Son extends Father {
        
        Son() {
            //super();        //子类隐式存在这一行调用,如果我们不写这一行,JVM默认会给咱们加上~
            System.out.println("Son 构造函数");
        }
        
        Son(int money) {
            super(money);     //子类显式指定父类的构造函数
            System.out.println("Son 构造函数");
        }
    }
    Son.java
    package cn.org.yinzhengjie.extemdPackage;
    
    /**
     *     测试继承类
     * @author 尹正杰
     */
    public class ExtendDemo {
        
        public static void main(String[] args) {
            Son son = new Son();
            Son son2 = new Son(50);
        }
        
    }
    ExtendDemo.java

  • 相关阅读:
    Vue 全局过滤器和局部过滤器使用方式
    Vue 标签显示/隐藏的方式对比demo
    OpenSSL SSL_read: Connection was reset, errno 10054
    Vue 自定义全局指令和局部指令demo
    Vue 列表渲染demo
    Vue Class样式和style样式编写
    vue中的函数(methods),计算属性(computed),监听器(watch)的区别demo
    Vue 常用指令
    针对 WebSocket 协议的 Locust 压测脚本实现(基于 Locust 1.0 以上版本)
    Locust 脚本开发入门(4)
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12233593.html
Copyright © 2020-2023  润新知