クラス・インスタンス・継承 (4/6)
作成:2013-08-10 10:41
更新:2013-08-10 10:41
更新:2013-08-10 10:41
■継承について
クラスを利用してプログラムを作成する場合、複雑なプログラムになると用意するクラスも膨大なものになります。例えばウインドウ1つをとっても、さまざまな種類のウインドウを作らないといけません。そんなとき、ウインドウを表示したり動かしたりリサイズしたりする処理を1つ1つのウインドウ関係クラスにすべて用意しなければいけないのは、非常に面倒です。
そこでオブジェクト指向では、「既にあるクラスの機能をまるごと受け継いで新しいクラスを作る」ということができるようにしました。これが「継承」です。この継承は、以下のようにして記述します。
では、実際に継承を使ってみましょう。下のリスト欄に簡単な例を挙げておきます。ここでは、MyObjectを継承して新たに作成した「EnchancedMyObject」というクラスを用意しています。これを利用した処理をMainメソッドに用意しておきました。
見ればわかるように、EnchancedMyObjectには、nameやageフィールドも、printDataメソッドもありません。が、new EnchancedMyObjectしたインスタンスでは、これらのものが普通に利用されています。継承により、MyObjectに用意されていたメンバがそのまま使えることがわかります。
このように継承関係にあるクラスでは、「継承の元になっているクラス」のことを「基本クラス」と呼び、「継承して新たに作られたクラス」を「派生クラス」と呼びます。オブジェクト指向では、基本クラスを継承して派生クラスを作る、というわけですね。
(※基本クラスと派生クラスは、一般的なオブジェクト指向言語では「スーパークラス」「サブクラス」とも呼ばれます。これらの呼び方も合わせて覚えておくと良いでしょう)
そこでオブジェクト指向では、「既にあるクラスの機能をまるごと受け継いで新しいクラスを作る」ということができるようにしました。これが「継承」です。この継承は、以下のようにして記述します。
class クラス : 継承元のクラス「class ○○」というようにクラスの名前を指定した後に、コロンを付けて、継承しようと思うクラスを記述します。これにより、そのクラスの中にあるすべてのメンバを受け継いで新しいクラスが作成されます。
{
……略……
}
では、実際に継承を使ってみましょう。下のリスト欄に簡単な例を挙げておきます。ここでは、MyObjectを継承して新たに作成した「EnchancedMyObject」というクラスを用意しています。これを利用した処理をMainメソッドに用意しておきました。
見ればわかるように、EnchancedMyObjectには、nameやageフィールドも、printDataメソッドもありません。が、new EnchancedMyObjectしたインスタンスでは、これらのものが普通に利用されています。継承により、MyObjectに用意されていたメンバがそのまま使えることがわかります。
このように継承関係にあるクラスでは、「継承の元になっているクラス」のことを「基本クラス」と呼び、「継承して新たに作られたクラス」を「派生クラス」と呼びます。オブジェクト指向では、基本クラスを継承して派生クラスを作る、というわけですね。
(※基本クラスと派生クラスは、一般的なオブジェクト指向言語では「スーパークラス」「サブクラス」とも呼ばれます。これらの呼び方も合わせて覚えておくと良いでしょう)
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | using System; namespace myapp { class Program { public static void Main( string [] args) { EnchancedMyObject obj = new EnchancedMyObject(); obj.name = "つやの" ; obj.age = 123; obj.mail = "syoda@tuyano.com" ; obj.printData(); obj.printDataEnchanced(); Console.ReadKey(); // キーを押すまで待つ } } class MyObject { public string name = "(noname)" ; public int age = 0; public void printData() { Console.WriteLine( "名前:{0}, 年齢:{1}歳" , name, age); } } class EnchancedMyObject : MyObject { public string mail = "(no mail)" ; public void printDataEnchanced() { Console.WriteLine( "名前:{0}\n\t年齢:{1}歳\n\tメール:{2}." , name, age, mail); } } } |
※関連コンテンツ