Java---継承

3788 ワード

Javaのクラスは、親クラスのすべてのpublicプロパティとメソッドを子クラスとして継承できます.継承されたキーワードはextendsです.注意すべきは、子クラスは親クラスの属性と方法を呼び出すことができ、親クラスは子クラスの属性と方法を呼び出すことができない(息子の目は父の目に似ていると言えるが、父の鼻が息子の鼻に似ていると言えば少し不適切である).クラスの継承フォーマット:
   class    {
    }
     
    class    extends    {
    }

クラスは複数の親の属性と方法を継承することができます(例えば、1人の子供の特徴は彼の父、母、おじいさん、おばあさんなどから来ることができます).同様に、1つの親クラスを複数のサブクラスで継承することもできます.次は例題で、継承の長所を体現することができる:王者の栄光を背景に、3人の英雄がいると仮定し、3人の間で2、3人が順番に攻撃し、最後に誰が勝利したかを判断する.継承されていない場合、3人の英雄が2人で攻撃する場合、プロセスは煩雑で、重複するコードが多く、各クラスには2つの方法(他の2人の英雄をそれぞれ攻撃する)が含まれています.しかし,継承を用いると,各サブクラスのメソッドを同じ親クラスに置くことができ,6つのメソッドを1つに統合することができる.コードは次のとおりです:親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);
	}
}

3つのサブクラスは、それぞれ3人の英雄を表しています.
ヒーロー1:
package herit;
public class A extends Hero{
	
}

英雄2
  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;
	}
}

英雄3
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个余暴击)玩家【鲁班】3ラウンド后回血100,その残血量は、2831プレイヤー【王昭君】が【魯班】に対して攻撃を発動【魯班】の残血量値が2267プレイヤー【魯班】が【王昭君】に対して攻撃を発動【王昭君】の残血量値が2011プレイヤー【王昭君】が【魯班】に対して攻撃を発動【魯班】の残血量値が1703プレイヤー【魯班】対【王昭君】である発动攻撃【王昭君】的剩余血量值为1704(含50余暴击)玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为1139玩家【鲁班】对【王昭君】发动攻击【王昭君】的剩余血量值为1397(含余暴击)玩家【鲁班】3ターン后回血100,残血量为:1239玩家【王昭君】对【鲁班】发动攻击【鲁班】的残血量值为675玩家【鲁班】对【王昭君】发动攻击【王昭君】的残血量值为1090(50追加暴击を含む)玩家【王昭君】对【鲁班】发动攻击【鲁班】的残血量值为111玩家【鲁班】对【王昭君】発动攻撃【王昭君】的剩余血量值为783(包括50个余暴击)玩家【王昭君】对【鲁班】发动攻击【鲁班】的剩余血量值为-453玩家【王昭君】获得胜利玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值为3803玩家【诸葛亮】对【王昭君】发动攻击【王昭君】的剩余血量值418玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值3239玩家【诸葛亮】对【王昭君】发动攻击【王昭君】的剩余血量值53玩家【王昭君】对【诸葛亮】发动攻击【诸葛亮】的剩余血量值2675玩家【诸葛亮】对【王昭君】発动攻撃【王昭君】的剩余血量值为-312玩家【诸葛亮】获得胜利