プログラミングをしてれば聞いたことはある継承って言葉
みなさんプログラミングをしていれば一同は継承って言葉は聞いたことがないでしょうか?
そこで今回はこの継承について誰でもわかるように頑張って解説をしていきたいとおもいます!
継承を使う意味
まず理解するために継承を使う意味を考えていきましょう。
ここでわかりやすいようにまず車に例えて説明します。
例えば車を100台実装してください!
って頼まれたとします。
真面目に車を100台プログラミングするか。
といいたいところですが実際やってらんないですよね?
そこでこの継承というものが役に立ちます!
ではここで1つ例を書いていきましょう。
public class Car01
{
//車の名前
string m_CarName;
//車のスピード
float m_Speed;
private Accel()
{
//Accelの処理
}
}
public class Car02
{
//車の名前
string m_CarName;
//車のスピード
float m_Speed;
//マニュアル車を想定しているのでギアを用意
float m_gear
private Accel()
{
//Accelの処理
}
}
public class Car03
{
//車の名前
string m_CarName;
//車のスピード
float m_Speed;
//オープンカー想定しているのでフラグ
bool m_isOpen;
private Accel()
{
//Accelの処理
}
}
うーんなんか同じプログラムが3つもありますねー
ちょっとこれいちいち管理するのめんどいですねー
でも特定の機能がある車があったらそれぞれのクラスに書きたいしまあいいか
でもこれ同じ機能を書かなくても良くする方法ないんか?
はい!ここで継承です!
では継承を使ったプログラムを書いてみましょう!
public class CarBase()
{
//車の名前(派生先で使いたいのでprotected付与)
protected string m_CarName;
//車のスピード(派生先で使いたいのでprotected付与)
protected float m_Speed;
//車ごとで処理が違う場合はオーバーライドしたいのでvirtual付与
public virtual Accel()
{
//Accelの処理
}
}
はいこのように共通している変数などはベースクラスとしてつくりました。
今度はそれをそれぞれの車に継承させていけばいいだけです。
public class Car01::CarBase()
{
public override Accel()
{
//CarBaseのAccelメソッドをオーバライドして違う処理にする。
}
}
public class Car02::CarBase()
{
//マニュアル車を想定しているのでギアを用意
float m_gear
public override Accel()
{
//CarBaseのAccelメソッドをオーバライドして違う処理にする。
}
}
public class Car03::CarBase()
{
//オープンカー想定しているのでフラグ
bool m_isOpen;
public override Accel()
{
//CarBaseのAccelメソッドをオーバライドして違う処理にする。
}
}
はい。このように継承をつかえばいちいち共通してつかう変数だったり同じメソッドをいちいち記述しなくてもすみますよね。メソッドに関しては継承先で同じメソッド名がいいけど中はちょっとだけ違うなんでことも結構あるのでオーバーライドして別の処理に変えることもできます。
なんて便利なんだ継承!
おわり