JAVA入門

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
{
・・・
}
ス‐パインターフェイス
サブインターフェイス
クラス