zoukankan      html  css  js  c++  java
  • JAVA 基础 / 第二十三课: 类和对象 / 什么是JAVA中的方法重载? 构造方法?

    2018-03-14

    一、方法的重载指的是方法名一样,但是参数类型不一样:

    1、attack方法的重载:

    有一种英雄,叫做物理攻击英雄 ADHero,为ADHero 提供三种方法;

    public void attack()
    public void attack(Hero h1)
    public void attack(Hero h1, Hero h2)

    方法名是一样的,但是参数类型不一样
    在调用方法attack的时候,会根据传递的参数类型以及数量,自动调用对应的方法

    public class ADHero extends Hero {
        public void attack() {
            System.out.println(name + " 进行了一次攻击 ,但是不确定打中谁了");
        } 
        public void attack(Hero h1) {
            System.out.println(name + "对" + h1.name + "进行了一次攻击 ");
        } 
        public void attack(Hero h1, Hero h2) {
            System.out.println(name + "同时对" + h1.name + "和" + h2.name + "进行了攻击 ");
        } 
        public static void main(String[] args) {
            ADHero bh = new ADHero();
            bh.name = "赏金猎人";
            Hero h1 = new Hero();
            h1.name = "盖伦";
            Hero h2 = new Hero();
            h2.name = "提莫"; 
            bh.attack(h1);
            bh.attack(h1, h2);
        }
    }

    2、可变数量的参数:

     如果要攻击更多的英雄,就需要设计更多的方法,这样类会显得很累赘,像这样:

    public void attack(Hero h1)
    public void attack(Hero h1,Hero h2)
    public void attack(Hero h1,Hero h2,Hero 3)

    这时,可以采用可变数量的参数,只需要设计一个方法

    public void attack(Hero ...heros)

    即可代表上述所有的方法了,在方法里,使用操作数组的方式处理参数heros即可

    public class ADHero extends Hero { 
        public void attack() {
            System.out.println(name + " 进行了一次攻击 ,但是不确定打中谁了");
        }
        // 可变数量的参数
        public void attack(Hero... heros) {
            for (int i = 0; i < heros.length; i++) {
                System.out.println(name + " 攻击了 " + heros[i].name); 
            }
        } 
        public static void main(String[] args) {
            ADHero bh = new ADHero();
            bh.name = "赏金猎人"; 
            Hero h1 = new Hero();
            h1.name = "盖伦";
            Hero h2 = new Hero();
            h2.name = "提莫"; 
            bh.attack(h1);
            bh.attack(h1, h2);
     
        }
    }

    二、通过一个类创建一个对象,这个过程叫做实例化,实例化是通过调用构造方法(又叫做构造器)实现的:

    1、什么是构造方法:

    方法名和类名一样(包括大小写)没有返回类型,实例化一个对象的时候,必然调用构造方法

    public class Hero { 
        String name; 
        float hp; 
        float armor; 
        int moveSpeed; 
        // 方法名和类名一样(包括大小写)
        // 没有返回类型
        public Hero() {
            System.out.println("实例化一个对象的时候,必然调用构造方法");
        }     
        public static void main(String[] args) {
            //实例化一个对象的时候,必然调用构造方法
            Hero h = new Hero();
        } 
    }

    2、隐式的构造方法:

    Hero类的构造方法是:

    public Hero(){ }

    这个无参的构造方法,如果不写,就会默认提供一个

    public class Hero {     
        String name; //姓名     
        float hp; //血量     
        float armor; //护甲     
        int moveSpeed; //移动速度    
        //这个无参的构造方法,如果不写,
        //就会默认提供一个无参的构造方法
        //  public Hero(){ 
        //      System.out.println("调用Hero的构造方法");
        //  }
     
        public static void main(String[] args) {
            Hero garen =  new Hero();
            garen.name = "盖伦";
            garen.hp = 616.28f;
            garen.armor = 27.536f;
            garen.moveSpeed = 350;
             
            Hero teemo =  new Hero();
            teemo.name = "提莫";
            teemo.hp = 383f;
            teemo.armor = 14f;
            teemo.moveSpeed = 330;
        }       
    }

    3、如果提供了一个有参的构造方法:

    一旦提供了一个有参的构造方法,同时又没有显式的提供一个无参的构造方法 
    那么默认的无参的构造方法,就“木有了“。

    public class Hero {      
        String name; //姓名      
        float hp; //血量      
        float armor; //护甲      
        int moveSpeed; //移动速度      
        //有参的构造方法
        //默认的无参的构造方法就失效了
        public Hero(String heroname){ 
            name = heroname;
        }      
        public static void main(String[] args) {
            Hero garen =  new Hero("盖伦"); 
              
            Hero teemo =  new Hero(); //无参的构造方法“木有了”
        }        
    }

    4、构造方法的重载:

     和普通方法一样,构造方法也可以重载。

    public class Hero {       
        String name; //姓名       
        float hp; //血量       
        float armor; //护甲       
        int moveSpeed; //移动速度       
        //带一个参数的构造方法
        public Hero(String heroname){ 
            name = heroname;
        }    
        //带两个参数的构造方法
        public Hero(String heroname,float herohp){ 
            name = heroname;
            hp = herohp;
        }       
        public static void main(String[] args) {
            Hero garen =  new Hero("盖伦"); 
            Hero teemo =  new Hero("提莫",383);
        }    
    }
  • 相关阅读:
    office2013 激活方式
    c# DataGridView绑定DataTable对象之后总会多一行
    oracle函数验证时间格式并返回
    Linux虚拟机与外面系统ping不通,或者连不上网
    恢复oracle中误删除drop掉的表
    WebService 检测到有潜在危险的 Request.Form 值
    mybatis标签之——关联映射
    word使用宏定义来统一设置图片大小
    mybatis常用标签
    mybatis标签之——<trim>
  • 原文地址:https://www.cnblogs.com/Parker-YuPeng/p/8564489.html
Copyright © 2011-2022 走看看