接口与继承系列教材 (六)- 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

发布了79 篇原创文章 · 获赞 15 · 访问量 6381

猜你喜欢

转载自blog.csdn.net/qq_31634777/article/details/104792350