zoukankan      html  css  js  c++  java
  • Java自学-接口与继承 super

    Java的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();
     
        }
     
    }
    

    练习super

    父类Hero提供了一个有参的构造方法:

    public Hero(String name){
      this.name = name;
    }
    

    但是没有提供无参的构造方法
    子类应该怎么处理?

    package charactor;
       
    public class Hero {
        public String name;
        protected float hp;
       
        public Hero(String name){
            this.name = name;
        }
         
    //    故意不提供无参的构造方法
    //    public Hero(){
    //     
    //    }
         
        public static void main(String[] args) {
         
        }
           
    }
  • 相关阅读:
    Visual Studio 2005 不能调试的问题
    自学C语言_第一章
    批处理For循环一键Update补丁程序
    小米MiFlash刷机报错售后方法参考
    Civil 3D 2012 CAD安装完成后打开报错“致命错误:Unhandled Delayload "D3DCOMPILER_47.dll"
    Windows查看端口被占用
    vc ++6.0打开或者添加出现错误解决方案
    一天总结
    一天总结
    一天总结
  • 原文地址:https://www.cnblogs.com/jeddzd/p/11518997.html
Copyright © 2011-2022 走看看