Download presentation
Presentation is loading. Please wait.
1
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀
2
7.1 インターフェイス(1) インターフェイスとは・・・ 「abstract」と類似性があるが・・・ →目的、使い方は異なる(説明は別頁)
7.1 インターフェイス(1) インターフェイスとは・・・ 「特定の機能概要」を定義したものが記述される 機能概要のため、宣言のみ 同一インターフェイスを実装したクラスは「その機能概要」が共通している 「abstract」と類似性があるが・・・ →目的、使い方は異なる(説明は別頁)
3
7.1 インターフェイス(2) 「abstract」やクラスの継承では・・・ 逆にインターフェイスの場合・・・
7.1 インターフェイス(2) 「abstract」やクラスの継承では・・・ 多重継承が認められていない (一つのクラスへ複数のスーパークラスを継承することが出来ないこと) サブクラスとスーパークラスとの間に「クラス」の関係があること(型、オブジェクトの関係) 逆にインターフェイスの場合・・・ 複数のインターフェイスを実装可能 クラス関係は無いため自由にクラスへ実装できる
4
7.1 インターフェイス(3) インターフェイスの宣言(一般形式) intfModifier interface intfName{
7.1 インターフェイス(3) インターフェイスの宣言(一般形式) intfModifier interface intfName{ varModifier1 type1 varName1=value1 ; ・ varModifierN typeN varNameN=valueN ; mthModifier1 rtype1 mthName1(params1) ; mthModifierN rtypeN mthNameN(paramsN) ; } interfaceの修飾子intfModifier。この修飾子を省略すると、同パッケージ内でのみ参照可。 メソッドの修飾子も別に指定可だが、インターフェイス変数に関しては特に指定が無い限り、public,static,finalとして扱われ、強制的に静的定数値となる。
5
7.1 インターフェイス(3) implementsキーワード 実装時の一般形式記述 インターフェイスをクラスに実装するためのキーワード
7.1 インターフェイス(3) implementsキーワード インターフェイスをクラスに実装するためのキーワード 実装時の一般形式記述 clsModifiers class clsName extends superName implements intfList { // ここにインターフェイスを実装する ・ } 実装時、インターフェイスメソッドの戻り値の型を合わせなければ、コンパイルエラーとなる。
6
7.1 インターフェイス(4) interface A{ void disp_A() ; } interface B{
7.1 インターフェイス(4) interface A{ void disp_A() ; } interface B{ void disp_B() ; class Cls implemnts A,B{ public void disp_A(){ System.out.println("Interface A") ; public void disp_B(){ System.out.println("Interface B") ; public class InterfaceAndClass { static public void main(String args[]){ Cls c=new Cls() ; c.disp_A() ; c.disp_B() ; } [出力結果] Interface A Interface B
7
7.1 インターフェイス(5) メソッド1 メソッド1 貼り付け メソッド2 メソッド2 インターフェイス1 メソッド3 メソッド3
7.1 インターフェイス(5) メソッド1 メソッド1 メソッド2 貼り付け メソッド2 インターフェイス1 メソッド3 メソッド3 貼り付け メソッド4 メソッド4 インターフェイス2 クラス インターフェイスはクラス機能概要の「表面」を表す。 例えるなら容器の入り口に「貼付けられる物」である。
8
7.2 インターフェイスの参照(1) 同インターフェイスの変数及びメソッドを参照 intfRef.varName intfRef.mthName(args) インターフェイス内で定義した変数値を参照可 異なるクラスへ導入した同インターフェイスのメソッドの呼び出しが可能 ただし、同インターフェイス内以外の変数及びメソッドの呼び出しはできない
9
7.2 インターフェイスの参照(2) interface A{ String s_a="Interface A" ;
7.2 インターフェイスの参照(2) interface A{ String s_a="Interface A" ; void disp_A() ; } interface B{ String s_b="Interface B" ; void disp_B() ; class Cls implements A,B{ public void disp_A(){ System.out.println(A.s_a) ; public void disp_B(){ System.out.println(B.s_b) ; public class InterfaceAndClass2 { static public void main(String args[]){ // インターフェイスを型として // オブジェクト作成可だが、 // 型にしたインターフェイスで定義した // メソッドのみが参照可能となる。 A c_a=new Cls() ; c_a.disp_A() ; // インターフェイスAでは定義されて // 無いため呼び出すことが出来ない。 // c.disp_B() ; // インターフェイスBのdisp_bを呼出す B c_b=new Cls() ; c_b.disp_B() ; } [出力結果] Interface A Interface B
10
7.3 インターフェイスの継承(1) インターフェイスの継承 インターフェイスの拡張一般記述形式 クラス同様「extends」を利用する
7.3 インターフェイスの継承(1) インターフェイスの継承 クラス同様「extends」を利用する クラスは単体継承の制限があるが、インターフェイスには無い(多重継承が可能) 継承元インターフェイスのことを「スーパーインターフェイス」と呼ぶ インターフェイスの拡張一般記述形式 intfModifier interface intfName extends intfList{ // インターフェイスの本体 } 継承するインターフェイスをカンマで区切って複数記述する。
11
7.3 インターフェイスの継承(2) interface A{ String s_a="Interface A" ;
7.3 インターフェイスの継承(2) interface A{ String s_a="Interface A" ; void disp() ; } interface B{ String s_b="Interface B" ; int sum() ; interface C extends A,B{ String s_c="Interface C" ; int sub() ; インターフェイスA及びBを継承してCを作成する。この時、A,Bのメソッド及び変数は全てCにも受け継がれる。 ただし、継承したインターフェイスを実装したクラスは、スーパーインターフェイスのメソッドも含め全て実装しなければならない。 続く…
12
7.3 インターフェイスの継承(3) 全ページ続き… class Math implements C{ int a,b ;
7.3 インターフェイスの継承(3) 全ページ続き… class Math implements C{ int a,b ; Math(int a,int b){ this.a=a ; this.b=b ; } public void disp(){ System.out.print("a="+this.a) ; System.out.print(",b = "+this.b) ; public int sum(){ return this.a+this.b ; public int sub(){ return this.a-this.b ; public class InterfaceExtends { static public void main(String args[]){ int a=Integer.valueOf(args[0]).intValue() ; int b=Integer.valueOf(args[1]).intValue() ; Math m=new Math(a,b) ; m.disp() ; System.out.println("a + b = "+m.sum()) ; System.out.println("a + b = "+m.sub()) ; } [出力結果] a = 8 , b = 5 a + b = 13 a + b = 3
13
7.4 instanceof演算子(1) 「instanceof」演算子とは
オブジェクトのクラス、実装されたインターフェイスについて確認する時に利用 記述一般形式 varName instaceof type type:クラス又はインターフェイス名 varName:オブジェクト参照変数
14
instanceof使用例(1) abstract class Vehicle{
final String s="This is \"Vehicle\"" ; } abstract class Non_Vehicle{ final String s="This is \"Non_Vehicle\"" ; interface A{ void disp() ; interface B{ class Car extends Vehicle implements A{ public void disp(){ System.out.println(this.s) ; class Bike extends Vehicle implements B{ public void disp(){ System.out.println(this.s) ; } class Cart extends Non_Vehicle implements A{ class Nothing extends Non_Vehicle implements B{ 続く…
15
instanceof使用例(2) public class Use_Incetanceof {
static public void main(String args[]){ Vehicle v[]=new Vehicle[2] ; Non_Vehicle n_v[]=new Non_Vehicle[2] ; v[0]=new Car() ; v[1]=new Bike(); n_v[0]=new Cart() ; n_v[1]=new Nothing() ; for(int i=0;i<2;i++){ System.out.println("Vehicleオブジェクト...v["+i+"]") ; System.out.print("Vehicleか?...") ; System.out.println(v[i] instanceof Vehicle) ; if(v[i] instanceof A){ System.out.print("インターフェイスA...") ; A a=(A)v[i] ; a.disp() ; } 続く…
16
instanceof使用例(3) 前頁の続き… if(v[i] instanceof B){
System.out.print("インターフェイスB...") ; B b=(B)v[i] ; b.disp() ; } System.out.println() ; for(int i=0;i<2;i++){ System.out.println("Non_Vehicleオブジェクト...n_v["+i+"]") ; System.out.print("Non_Vehicleか?...") ; System.out.println(n_v[i] instanceof Non_Vehicle) ; if(n_v[i] instanceof A){ System.out.print("インターフェイスA...") ; A a=(A)n_v[i] ; a.disp() ; 続く…
17
instanceof使用例(4) 前頁の続き… if(n_v[i] instanceof B){
System.out.print("インターフェイスB...") ; B b=(B)n_v[i] ; b.disp() ; } [出力結果] Vehicleオブジェクト...v[0] Vehicleか?...true インターフェイスA...This is "Vehicle" Vehicleオブジェクト...v[1] インターフェイスB...This is "Vehicle" Non_Vehicleオブジェクト...n_v[0] Non_Vehicleか?...true インターフェイスA...This is "Non_Vehicle" Non_Vehicleオブジェクト...n_v[1] インターフェイスB...This is "Non_Vehicle"
18
練習問題1 インターフェイス継承の部分において掲載したプログラム例を利用し、既存のメソッドsum()、sub()、disp()に加え、さらに乗算、除算を行うためのインターフェイス及びメソッドを加え、さらに、すべての(加減乗除)計算を行うように改良せよ。計算に用いる値は任意とする。また、値の入力方法は問わない。ヒント:インターフェイスの継承の特徴を利用して他のインターフェイスを付け足していくことが出来ること。
19
練習問題2 2次元座標値、3次元座標値における計算を行うプログラムを作成したい。次ページ図を元に座標値を加算するプログラムを作成せよ。計算に用いる値は任意とする。 例: 2次元(1,1)+(2,2)=(3,3) 3次元(1,1,1)+(1,2,1)+(2,1,2)=(4,4,4)
20
練習問題2.1図 abstract class Figure int a[] int b[] class Fig_3D 継承
void Sum() 継承 実装 class Fig_2D void Sum() interface Calc 実装 void Sum()
21
練習問題3 次ページ図を参考にしてI1~I4インターフェイスを作成、また、Xクラス、Wクラスを作り、Wオブジェクトを作る。このとき、Wオブジェクトに実装されているインターフェイスをinstanceof演算子によって調べ、また、オブジェクトがX型であるかも調べるプログラムを作成せよ。(インターフェイス及びクラス内のメソッドの有無は問わない)
22
練習問題3.1図 interface I1 interface I2 interface I4 拡張 拡張 実装 interface I3
class W 継承 実装 class X オブジェクト化するのは クラスW
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.