Java---継承
3788 ワード
Javaのクラスは、親クラスのすべてのpublicプロパティとメソッドを子クラスとして継承できます.継承されたキーワードはextendsです.注意すべきは、子クラスは親クラスの属性と方法を呼び出すことができ、親クラスは子クラスの属性と方法を呼び出すことができない(息子の目は父の目に似ていると言えるが、父の鼻が息子の鼻に似ていると言えば少し不適切である).クラスの継承フォーマット:
クラスは複数の親の属性と方法を継承することができます(例えば、1人の子供の特徴は彼の父、母、おじいさん、おばあさんなどから来ることができます).同様に、1つの親クラスを複数のサブクラスで継承することもできます.次は例題で、継承の長所を体現することができる:王者の栄光を背景に、3人の英雄がいると仮定し、3人の間で2、3人が順番に攻撃し、最後に誰が勝利したかを判断する.継承されていない場合、3人の英雄が2人で攻撃する場合、プロセスは煩雑で、重複するコードが多く、各クラスには2つの方法(他の2人の英雄をそれぞれ攻撃する)が含まれています.しかし,継承を用いると,各サブクラスのメソッドを同じ親クラスに置くことができ,6つのメソッドを1つに統合することができる.コードは次のとおりです:親Hero
3つのサブクラスは、それぞれ3人の英雄を表しています.
ヒーロー1:
package herit;
英雄2
英雄3
最後に、主関数を含むクラス
ソースコードをよく見ると、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玩家【诸葛亮】获得胜利
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玩家【诸葛亮】获得胜利