JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承 簡単JAVA説明⑱ 抽象クラス abstractという修飾子がついたクラスを抽象クラ スといいます。特徴として 1.インスタンスを作成することができない。 つまり new 演算子でインスタンスを作成できません。 例 abstract class miniTest { : } public static void main(){ miniTest mt = new miniTest(); ・・・・できない! } 簡単JAVA説明⑱ 抽象クラス 特徴 1.抽象クラス はそのままではインスタンス化すること ができず、必ずサブクラスを定義して不完全なメソッ ドの実体を定義してから使用する必要があります。 2.通常、ひとつ以上の 抽象メソッド を含みます。 3.抽象メソッドはメソッド名、引数の型のみが定義さ れていますので、どこかでその中身を定義する必要 があります。 簡単JAVA説明⑱ 構文 abstract class クラス名 { フィールド宣言; abstract 戻りの型 メソッド名(引数リスト); : } 簡単JAVA説明⑱ 抽象クラスの利用 1.抽象クラスはサブクラスを作成できます。 2.サブクラスでインスタンスを作成するために は継承したメソッドの内容をオーバーライドす る(再定義する)。 簡単JAVA説明⑱ 例 abstract class miniTest{ protected int juni; public void setJuni(int j){ juni=j; System.out.println("順位は"+ juni +"です。"); } abstract void show(); } 簡単JAVA説明⑱ class Test1 extends miniTest{ private int no; private double score; Test1(int n, double s){ no=n; score=s; System.out.println("番号は"+ no + "点数は"+score); } public void show(){ System.out.println("番号は"+no); System.out.println("点数は"+score); System.out.println("順位は" + juni); } } 簡単JAVA説明⑱ class Test2 extends miniTest{ private int no; private double score; Test2(int m){ no=m; System.out.println("番号は"+ no); } public void show(){ System.out.println("番号は"+no); System.out.println("順位は" + juni); } } 簡単JAVA説明⑱ class Sample1{ public static void main(String args[]){ miniTest tes[] = new miniTest[2]; tes[0] = new Test1(1,56); tes[0].setJuni(20); tes[1] = new Test2(2); tes[1].setJuni(25); tes[0].show(); tes[1].show(); } } 簡単JAVA説明⑱ 実行結果 番号は1点数は56.0 順位は20です。 番号は2 順位は25です。 番号は1 TEST1 点数は56.0 番号、点数、順位 順位は20 番号は2 TEST2 順位は25 番号、順位 簡単JAVA説明⑱ 抽象クラスでは、フィールドは変更可なので、 フィールド、メソッドを継承、再定義して用いま す。ここでは、TEST1、TEST2で順位と表示の メソッドを再定義し用いています。 抽象クラス フィールド、 メソッド 継承、再定義 簡単JAVA説明⑱ 4. インターフェイス 抽象クラスと同じような仕組みとして、インターフェイ スというものがあります。 構文 interface インタフェース名 { 型名 フィールド名=式; 戻りの型 メソッド名(); } 簡単JAVA説明⑱ インターフェイス 特徴 1.フィールド、メソッドを持つ 2.コンストラクタは持たない 3.メンバには何も修飾子をつけないが フィールドは定数(public static final) メソッドは抽象メソッド(abstract) 4.インスタンスは作成できない 簡単JAVA説明⑱ 5.インターフェイスの実装 構文 class クラス名 impliments インターフェイス名{ ・・・ } インスタンス作成のためには、 「インターフェイスのメソッドを全て定義する」 必要があります。 以下に例をあげます。 簡単JAVA説明⑱ interface miniTest{ void show(); } 簡単JAVA説明⑱ class Test1 implements miniTest{ private int no; private double score; public Test1(int n, double s){ no=n; score=s; System.out.println("番号は"+no+ "点数は"+score); } public void show(){ System.out.println("番号は"+no); System.out.println("点数は"+score); } } 簡単JAVA説明⑱ class Test2 implements miniTest{ private int jun; public Test2(int j){ jun=j; System.out.println("順位は"+jun); } public void show(){ System.out.println("順位は"+jun); } } 簡単JAVA説明⑱ class Sample2{ public static void main(String args[]){ miniTest tes[] = new miniTest[2]; tes[0] = new Test1(1,56); tes[1] = new Test2(20); tes[0].show(); tes[1].show(); } } 簡単JAVA説明⑱ 実行結果 番号は1点数は56.0 順位は20 番号は1 TEST1 点数は56.0 TEST2 順位は20 簡単JAVA説明⑱ 解説 抽象クラスでは、フィールドは変更可でしたが、 インターフェイスではこれらは変更不可(定数)ですが、 メソッドを継承し、それらをオーバーライド(再定義)し 使っていくのが特徴です。ここでは、show()と言うメソッ ドを再定義。 インターフェイス メソッド 継承、再定義 簡単JAVA説明⑱ 多重継承 構文 class クラス名 implements インターフェイス名1、インターフェ イス名2、・・・ { ・・・ } 簡単JAVA説明⑱ 例 interface midTest { void show1(); } interface endTest { void show2(); } 簡単JAVA説明⑱ class Test implements midTest,endTest { private int no; private double score; public Test(int n, double s){ no=n; score=s; System.out.println("番号は"+no+ "点数は"+score); } public void show1(){ System.out.println("番号は"+no); System.out.println("点数は"+score); } public void show2(){ System.out.println("テストは終わり"); } } 簡単JAVA説明⑱ //メイン class Sample3{ public static void main(String args[]){ Test tes = new Test(1,56); tes.show1(); tes.show2(); } } 簡単JAVA説明⑱ 実行結果 番号は1点数は56.0 番号は1 点数は56.0 テストは終わり 簡単JAVA説明⑱ インターフェイスの拡張 クラス同様、インターフェイスも拡張出来ます。 サブ インターフェイス インターフェイス 拡張 ス-パー インターフェイス インターフェイス 簡単JAVA説明⑱ 構文 interface サブインターフェイス名 extends スーパーインターフェ イス名1、スーパーインターフェイス名2、・・・ { ・・・ } 簡単JAVA説明⑱ interface endTest { ・・・ } interface midTest extends endTest { ・・・ } class Test implements midTest { ・・・ } ス‐パインターフェイス サブインターフェイス クラス
© Copyright 2024 ExpyDoc