how2j.cn


工具版本兼容问题
方法的重载指的是方法名一样,但是参数类型不一样

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



10分
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : attack方法的重载   
步骤 2 : 可变数量的参数   
步骤 3 : 练习-治疗   
步骤 4 : 答案-治疗   

步骤 1 :

attack方法的重载

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

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

方法名是一样的,但是参数类型不一样
在调用方法attack的时候,会根据传递的参数类型以及数量,自动调用对应的方法
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); } }
步骤 3 :

练习-治疗

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
设计一个类Support (辅助英雄)继承Hero,提供一个heal(治疗)方法
对Support的heal方法进行重载
heal()
heal(Hero h) //为指定的英雄加血
heal(Hero h, int hp) //为指定的英雄加了hp的血
步骤 4 :

答案-治疗

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分39秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


public class Support extends Hero { public void heal() { System.out.println("对自己进行治疗"); } public void heal(Hero hero) { System.out.println("给英雄 " + hero + " 加血"); } public void heal(Hero hero, int hp) { System.out.println("给英雄 " + hero + " 加了 " + hp + "点血"); } }
public class Support extends Hero {

	public void heal() {
		System.out.println("对自己进行治疗");
	}

	public void heal(Hero hero) {
		System.out.println("给英雄 " + hero + " 加血");
	}

	public void heal(Hero hero, int hp) {
		System.out.println("给英雄 " + hero + " 加了 " + hp + "点血");
	}
	
}


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-08-14 答案
郭Bj



仅供参考
package demo;

/**
 * @author Bj
 *设计一个类Support (辅助英雄)继承Hero,提供一个heal(治疗)方法
对Support的heal方法进行重载

 */
   public class SupportHero extends Hero{
	  public int addBloods;
          public void heal(Hero...heros) {
        	  addBloods=(int)(Math.random()*1000);
          for(int i=0;i<heros.length;i++) {
        	   int totalBlood=heros[i].bloods+addBloods;
               System.out.println(name+"为"+heros[i].name+"治疗加血:"+addBloods);
               System.out.println(heros[i].name+"血量为:"+heros[i].bloods);
               System.out.println("总血量为:"+totalBlood);
    	 }
     }
          
          public static void main(String[] args) {
        	  SupportHero supportHero=new SupportHero();
        	  supportHero.name="蔡文姬";
        	  
        	  Hero hero1=new Hero();
        	  hero1.name="李元芳";
        	  hero1.bloods=3000;
        	  
        	  Hero hero2=new Hero();
        	  hero2.name="项羽";
        	  hero2.bloods=5000;
        	  
        	  supportHero.heal(hero1,hero2);
          }
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-07-30 小白交下作业,啊哈哈
香蕉你个芭拉



嘎嘎嘎
class Hero extends SupportHero   {

	public static void heal(Hero,Hero1)    {
	
		System.out.println(name+"对"+hero1.name+"治疗");
	}

    public static void heal(Hero,Hero2,Hero3)    {
	
		System.out.println(name+"对"+hero1.name+"和"+hero2.name+"治疗");
	}

    public static void main(String[] args)   {
	              
	   SupportHero  naima= new SupportHero();
       naima.name="索拉卡"; 
       
	   Hero gairun = new Hero();
	   gairun.name = "盖伦";

	   Hero huangzi= new Hero();
	   huangzi.name= "德玛西亚皇子";
       
	   naima.heal(gairun);
	   naima.heal(gairun,huangzi);
		
	}
		
}

							


2 个答案

默悠然 答案时间:2018-08-09
radadele 答案时间:2018-08-01




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-07-21 交作业
2018-07-05 交作业
2018-07-05 作业
2018-06-13 有没有办法不在Support里面建garen,直接使用Hero里面的garen
2018-06-04 交作业
2018-06-04 交作业
2018-06-01 交作业
2018-05-29 交作业
2018-05-19 交作业
2018-05-15 交作业
2018-05-07 交作业
2018-05-04 作业
2018-04-20 【交作业】重载
2018-04-20 交作业-打卡
2018-04-04 作业
2018-03-28 作业
2018-03-27 交作业
2018-03-14 做出来了,但是有问题,需要提问
2018-03-11 交作业
2018-02-09 站长大大,请问怎么利用可变数量的参数对多个英雄进行特定血量的治疗?
2018-01-23 可变数量的参数的写法问题
2018-01-16 我这个编译通过不了是为什么哦
2018-01-04 为什么这里的name是赏金猎人
2017-12-08 方法重载有错求解
2017-12-07 交作业。假如Hero类中已经有了叫盖伦的对象,那继承类Support中又创建一个对象也叫盖伦…有点混乱
2017-12-06 作业,多变量和可变数量的参数,这样写对吗?
2017-12-02 弄出来了
2017-11-06 不知道为什么
2017-09-26 方法的重载可以指定不同的返回值类型吗?
2017-09-20 求救!!!
2017-08-31 交作业,同时练习多参数和可变数量参数重载。
2017-08-03 关于参数的小细节问题
2017-06-15 题中的可变参数没看懂
2017-06-02 交作业
2017-02-11 public void attack(Hero ...heros)
2017-01-16 传递参数的疑问
2016-11-20 为什么不用bh.name而是用name?
2016-09-23 重载方法的时候,传入的参数如何理解
2016-07-29 在练习方法重载时,会出现如下问题
2016-06-06 利用前几节的内容,结合了一下,不知道这样写对不对,会不会浪费资源什么的
2016-06-04 不知道如何传入参数。。第三个练习的
2016-05-10 关于“可变数量的参数”的详细说明




提问之前请登陆
关于 JAVA 基础-类和对象-方法重载 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图