how2j.cn


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


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



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



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

步骤 1 :

attack方法的重载

edit
有一种英雄,叫做物理攻击英雄 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 :

可变数量的参数

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

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

这时,可以采用可变数量的参数
只需要设计一个方法
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 :

练习-治疗

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
设计一个类Support (辅助英雄)继承Hero,提供一个heal(治疗)方法
对Support的heal方法进行重载
heal()
heal(Hero h) //为指定的英雄加血
heal(Hero h, int hp) //为指定的英雄加了hp的血
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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


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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2023-05-07 这为什么报错
旧桥




这里为什么报错
public class Support extends Hero{
    public void heal(){
    }
    public void heal(Hero h){
        System.out.println("为"+h+"加血");
    }
    public void heal(Hero h,int hp){
        System.out.println("为"+h+"加"+hp+"血");
    }

    public static void main(String[] args){
        Support s1 = new Support();
        s1.heroName = "奶妈";
        Hero s2 = new Hero();
        s2.heroName = "蛮子";
        s1.heal("蛮子");     //这一行报错
    }

}

							


4 个答案

码农人
答案时间:2023-11-20
//帮你修改后

zhangsheng004
答案时间:2023-08-31
heal(Hero h)这个函数里,h是类,下面的输出里应该是h.name而不是h,下面调用的时候也不是“蛮子”这个字符串,而是s2吧

法兰西炒鸡蛋
答案时间:2023-05-15
传入的值不对,应该是传入对象,你传了个字符串

一梦烟火
答案时间:2023-05-10
heal是Support的函数,Hero没有继承Support的属性



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2023-01-20 答案示例
Rocco_32




如代码所示
package Part7;

/**
 * @author Rocco
 * @version 1.0
 **/
public class Support extends Hero {
    public void heal(){
        System.out.println(getName() + "执行对以方回血技能");
    }

    public void heal(Hero hero){
        hero.hp += 300;
        System.out.println(getName() + "对" + hero.name + "恢复了300血量");
    }

    public void heal(Hero ...heroes){
        System.out.print(getName() + "对");
        for (int i = 0; i < heroes.length; i++) {
            heroes[i].hp += 300;
            System.out.print(heroes[i].name + " ");
        }
        System.out.println("恢复了300血量");
    }

    public static void main(String[] args) {
        Support hero = new Support();
        hero.name = "琴女";
        Hero hero1 = new Hero();
        hero1.name = "蛮王";
        Hero hero2 = new Hero();
        hero2.name = "李青";
        hero.heal();
        hero.heal(hero1);
        hero.heal(hero1, hero2);


    }
}

							


3 个答案

2672148523
答案时间:2024-02-09
package com.itheima.tomcat; public class Support extends Hero{ public void heal() { } public void heal(Hero h) { System.out.println("给英雄" + h.heroName + "加血"); } public void heal(Hero h, int hp){ System.out.println("给英雄" + h.heroName + "加了" + hp + "血"); } public static void main(String[] args) { Hero h1 = new Hero(); h1.heroName = "盖伦"; h1.hp = 100; Support s1 = new Support(); s1.heal(h1,100); } }

加长版海贼
答案时间:2023-08-09
奶妈奶人

莫諾
答案时间:2023-03-15
111
public void heal(int b, Hero... heros) {
		for(int i = 0; i < heros.length; i++) {
			System.out.println(name + heros[i].name +"血量加了" + b);
		}
	}



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-08-26 治疗答案
2022-04-15 看看
2022-03-19 为什么输出不对应


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 87 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-类和对象-方法重载 的提问

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

上传截图