java入門⑨ 抽象メソッド実装、インターフェイス実...

28
JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承 JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承

Upload: others

Post on 22-Jan-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

JAVA入門⑨抽象メソッド実装、インターフェイス実

装、継承

JAVA入門⑨抽象メソッド実装、インターフェイス実

装、継承

Page 2: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

抽象クラスabstractという修飾子がついたクラスを抽象クラ

スといいます。特徴として

1.インスタンスを作成することができない。

つまり new 演算子でインスタンスを作成できません。

abstract class miniTest {

:

}

public static void main(){

miniTest mt = new miniTest(); ・・・・できない!

}

Page 3: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

抽象クラス

特徴

1.抽象クラス はそのままではインスタンス化することができず、必ずサブクラスを定義して不完全なメソッドの実体を定義してから使用する必要があります。

2.通常、ひとつ以上の 抽象メソッド を含みます。

3.抽象メソッドはメソッド名、引数の型のみが定義されていますので、どこかでその中身を定義する必要があります。

Page 4: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

構文

abstract class クラス名

{

フィールド宣言;

abstract 戻りの型 メソッド名(引数リスト);

:

}

Page 5: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

抽象クラスの利用

1.抽象クラスはサブクラスを作成できます。

2.サブクラスでインスタンスを作成するためには継承したメソッドの内容をオーバーライドする(再定義する)。

Page 6: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

例abstract class miniTest{

protected int juni;

public void setJuni(int j){

juni=j;

System.out.println("順位は"+ juni +"です。");

}

abstract void show();

}

Page 7: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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);

}

}

Page 8: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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);

}

}

Page 9: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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();

}

}

Page 10: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

実行結果番号は1点数は56.0

順位は20です。

番号は2

順位は25です。

番号は1

点数は56.0

順位は20

番号は2

順位は25

TEST1番号、点数、順位

TEST2番号、順位

Page 11: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

抽象クラスでは、フィールドは変更可なので、

フィールド、メソッドを継承、再定義して用いま

す。ここでは、TEST1、TEST2で順位と表示の

メソッドを再定義し用いています。

フィールド、メソッド

継承、再定義抽象クラス

Page 12: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

4. インターフェイス

抽象クラスと同じような仕組みとして、インターフェイ

スというものがあります。

構文interface インタフェース名 {

型名 フィールド名=式;

戻りの型 メソッド名();

}

Page 13: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

インターフェイス

特徴

1.フィールド、メソッドを持つ

2.コンストラクタは持たない

3.メンバには何も修飾子をつけないが

フィールドは定数(public static final)

メソッドは抽象メソッド(abstract)

4.インスタンスは作成できない

Page 14: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

5.インターフェイスの実装構文

class クラス名 impliments インターフェイス名{

・・・

インスタンス作成のためには、

「インターフェイスのメソッドを全て定義する」

必要があります。

以下に例をあげます。

Page 15: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱interface miniTest{

void show();

}

Page 16: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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);

}

}

Page 17: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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);

}

}

Page 18: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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();

}

}

Page 19: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

実行結果

番号は1点数は56.0

順位は20

番号は1

点数は56.0

順位は20

TEST1

TEST2

Page 20: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

解説

抽象クラスでは、フィールドは変更可でしたが、

インターフェイスではこれらは変更不可(定数)ですが、

メソッドを継承し、それらをオーバーライド(再定義)し

使っていくのが特徴です。ここでは、show()と言うメソッ

ドを再定義。

メソッド継承、再定義

インターフェイス

Page 21: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

多重継承

構文

class クラス名 implements インターフェイス名1、インターフェイス名2、・・・

・・・

Page 22: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

interface midTest

{

void show1();

}

interface endTest

{

void show2();

}

Page 23: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単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("テストは終わり");

}

}

Page 24: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

//メイン

class Sample3{

public static void main(String args[]){

Test tes = new Test(1,56);

tes.show1();

tes.show2();

}

}

Page 25: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

実行結果番号は1点数は56.0

番号は1

点数は56.0

テストは終わり

Page 26: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

インターフェイスの拡張

クラス同様、インターフェイスも拡張出来ます。

サブインターフェイス

インターフェイス

拡張

ス-パーインターフェイス

インターフェイス

Page 27: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

構文

interface サブインターフェイス名 extends スーパーインターフェイス名1、スーパーインターフェイス名2、・・・

{

・・・

Page 28: JAVA入門⑨ 抽象メソッド実装、インターフェイス実 装、継承mackin/java/2006/slides/20060705.pdf2006/07/05  · interface endTest ・・・} interfacemidTest extends

簡単JAVA説明⑱簡単JAVA説明⑱

interface endTest

{

・・・

}

interface midTest extends endTest

{

・・・

}

class Test implements midTest

{

・・・

}

ス‐パインターフェイス

サブインターフェイス

クラス