Java---继承

Java中的类可以作为子类继承父类中的所有public属性和方法,继承的关键字为:extends。值得注意的是,子类可以调用父类中的属性和方法,而父类无法调用子类中的属性和方法(就如我们可以说儿子的眼睛像父亲的眼睛,但如果说父亲的鼻子像儿子的鼻子就有些不妥了)。
类的继承格式:

   class 父类 {
    }
     
    class 子类 extends 父类 {
    }

类可以继承多个父类的属性和方法(就如一个孩子的特点可以来自他的父亲、母亲、爷爷、奶奶等)。同样的,一个父类也可以被多个多个子类继承。
下面为一个例题,可以体现继承的优点:
以王者荣耀为背景,假设有三个英雄,三者之间两两按顺序攻击,判断最后谁获得胜利。如若没有继承,那三个英雄两两攻击时,过程很繁琐,需要重复的代码很多,每一个类里面都要包含两个方法(分别对其他两个英雄进行攻击)。但如果用了继承,则可以把每个子类当中的方法放在同一个父类当中,这样六个方法就可以整合为一个。
代码如下:
父类Hero

package herit;

public class Hero {
	String name;
	int hp;
	int ad;
	public void ack(Hero hero){
		hero.hp-=ad;
		System.out.println("玩家"+name+"对"+hero.name+"发动攻击"+hero.name+"的剩余血量值为"+hero.hp);
	}
}

三个子类,分别表示了三个英雄:

英雄一:

package herit;

public class A extends Hero{
	
}

英雄二

  package herit;
  
public class B extends Hero{
	public void ack(Hero hero,Hero hero2){
		hero.hp=hero.hp-hero2.ad-50;
		System.out.println("玩家"+name+"对"+hero.name+"发动攻击"+hero.name+"的剩余血量值为"+hero.hp+"(含50额外暴击)");
	}
	
	public int back(Hero hero,int i){
		if(i==3){
		hero.hp +=100;
		System.out.println("玩家"+hero.name+"三回合后回血100,其剩余血量为:"+hero.hp);
		i=0;
		}
		return i;
	}
}

英雄三

package herit;


public class C extends Hero{

}

最后,含有主函数的类

package herit;

public class Manage {
	public static void main(String []args){
		A a=new A();
		a.name="【王昭君】";
		a.hp=3546;
		a.ad =564;
	
	B b=new B();
	b.name="【鲁班】";
	b.hp=4987;
	b.ad =257;
	
	C c=new C();
	c.name="【诸葛亮】";
	c.hp=4367;
	c.ad =365;
	
	for(int i=0;a.hp>0&&b.hp>0;i++){
		a.ack(b);
		if(b.hp<=0){
			System.out.println("玩家"+a.name+"获得胜利");
			break;
		}
		b.ack(a,b);
		i=b.back(b, i);
	}
	if(b.hp>0)
	System.out.println("玩家"+b.name+"获得胜利");
	if(a.hp>0){
		for(;a.hp>0&&c.hp>0;){
			a.ack(c);
			if(c.hp<=0){
				System.out.println("玩家"+a.name+"获得胜利");
				break;
			}
			c.ack(a);
		}
		if(c.hp>0)
		System.out.println("玩家"+c.name+"获得胜利");
	}
	
	
		else{
			for(int i=0;b.hp>0&&c.hp>0;i++){
				b.ack(c,b);
				if(c.hp<=0){
					System.out.println("玩家"+b.name+"获得胜利");
					break;
					}
				c.ack(b);
				i=b.back(b, i);
			}
			if(c.hp>0)
			System.out.println("玩家"+c.name+"获得胜利");
		}
	}
}

仔细看源代码,会发现B英雄中不仅改变的父类中的函数,还定义了新的函数。在Java中这样做是完全合法的。
结果如下:

  • 玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为4423
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为3239(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为3859
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为2932(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为3295
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为2625(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为2731
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为2318(含50额外暴击)
    玩家【鲁班】三回合后回血100,其剩余血量为:2831 玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为2267
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为2011(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为1703
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为1704(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为1139
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为1397(含50额外暴击)
    玩家【鲁班】三回合后回血100,其剩余血量为:1239 玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为675
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为1090(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为111
    玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为783(含50额外暴击)
    玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为-453 玩家【王昭君】获得胜利
    玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值为3803
    玩家【诸葛亮】对【王昭君】发动攻击【王昭君】的剩余血量值为418
    玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值为3239 玩家【诸葛亮】对【王昭君】发动攻击【王昭君】的剩余血量值为53
    玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值为2675
    玩家【诸葛亮】对【王昭君】发动攻击【王昭君】的剩余血量值为-312 玩家【诸葛亮】获得胜利
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值