zoukankan      html  css  js  c++  java
  • 接口与继承系列教材 (六)- Java的super关键字

    super关键字

    步骤1:准备一个显式提供无参构造方法的父类
    步骤2:实例化子类,父类的构造方法一定会被调用
    步骤3:父类显式提供两个构造方法
    步骤4:子类显式调用父类带参构造方法
    步骤5:调用父类属性
    步骤6:调用父类方法
    步骤7:练习-super
    步骤8:答案-super

    步骤 1 : 准备一个显式提供无参构造方法的父类

    准备显式提供无参构造方法的父类 
    在实例化Hero对象的时候,其构造方法会打印 
    “Hero的构造方法 "

    package charactor;

    import property.Item;

    public class Hero {

            

        String name; //姓名

            

        float hp; //血量

            

        float armor; //护甲

            

        int moveSpeed; //移动速度

         

        public void useItem(Item i){

            System.out.println("hero use item");

            i.effect();

        }

         

        public Hero(){

            System.out.println("Hero的构造方法 ");

        }

         

        public static void main(String[] args) {

            new Hero();

        }

          

    }

    步骤 2 : 实例化子类,父类的构造方法一定会被调用

    实例化一个ADHero(), 其构造方法会被调用 
    父类的构造方法也会被调用 
    并且是父类构造方法先调用 
    子类构造方法会默认调用父类的 无参的构造方法

    实例化子类,父类的构造方法一定会被调用

    package charactor;

      

    public class ADHero extends Hero implements AD{

      

        @Override

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

         

        public ADHero(){

             

            System.out.println("AD Hero的构造方法");

        }

         

        public static void main(String[] args) {

            new ADHero();

             

        }

      

    }

    步骤 3 : 父类显式提供两个构造方法

    分别是无参的构造方法和带一个参数的构造方法

    package charactor;

    import property.Item;

    public class Hero {

            

        String name; //姓名

            

        float hp; //血量

            

        float armor; //护甲

            

        int moveSpeed; //移动速度

         

        public void useItem(Item i){

            System.out.println("hero use item");

            i.effect();

        }    

         

        public Hero(){

            System.out.println("Hero的无参的构造方法 ");

        }

         

        public Hero(String name){

            System.out.println("Hero的有一个参数的构造方法 ");

            this.name = name;

        }

         

        public static void main(String[] args) {

            new Hero();

        }

          

    }

    步骤 4 : 子类显式调用父类带参构造方法

    使用关键字super 显式调用父类带参的构造方法

    package charactor;

      

    public class ADHero extends Hero implements AD{

      

        @Override

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

         

        public ADHero(String name){

            super(name);

            System.out.println("AD Hero的构造方法");

        }

         

        public static void main(String[] args) {

            new ADHero("德莱文");

        }

      

    }

    步骤 5 : 调用父类属性

    通过super调用父类的moveSpeed属性
    ADHero也提供了属性moveSpeed

    public int getMoveSpeed(){

       return this.moveSpeed;

    }

    public int getMoveSpeed2(){

       return super.moveSpeed;

    }

    package charactor;

      

    public class ADHero extends Hero implements AD{

        int moveSpeed=400//移动速度

        @Override

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

         

        public int getMoveSpeed(){

            return this.moveSpeed;

        }

         

        public int getMoveSpeed2(){

            return super.moveSpeed;

        }

         

        public static void main(String[] args) {

            ADHero h= new ADHero();

             

            System.out.println(h.getMoveSpeed());

            System.out.println(h.getMoveSpeed2());

             

        }

      

    }

    步骤 6 : 调用父类方法

    ADHero重写了useItem方法,并且在useItem中通过super调用父类的useItem方法

    package charactor;

    import property.Item;

    import property.LifePotion;

    public class ADHero extends Hero implements AD {

        int moveSpeed = 400// 移动速度

        @Override

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

        public int getMoveSpeed() {

            return this.moveSpeed;

        }

        public int getMoveSpeed2() {

            return super.moveSpeed;

        }

        // 重写useItem,并在其中调用父类的userItem方法

        public void useItem(Item i) {

            System.out.println("adhero use item");

            super.useItem(i);

        }

        public static void main(String[] args) {

            ADHero h = new ADHero();

            LifePotion lp = new LifePotion();

        }

    }


    更多内容,点击了解: https://how2j.cn/k/interface-inheritance/interface-inheritance-super/311.html

  • 相关阅读:
    LVM详解
    redis数据类型
    radis数据库安装
    POJ3294 Life Forms 【后缀数组】
    BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】
    POJ2774 Long Long Message 【后缀数组lcp】
    POJ2406 Power Strings 【KMP 或 后缀数组】
    POJ3261 Milk Patterns 【后缀数组】
    BZOJ3289 Mato的文件管理 【莫队 + 树状数组】
    BZOJ2460 [BeiJing2011]元素 【线性基】
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615543.html
Copyright © 2011-2022 走看看