第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
クラス図(1) FM12013 山口 亨. クラスとは 現実に存在する “ 物体 ” (オブジェクト)の 構造や振る舞いなどに着目して注目し抽 象化したもの クラス図を含む UML のほとんどの図で使用 されている.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
3-3 クラス図の関係その2.
アルゴリズムとプログラミング (Algorithms and Programming)
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Bridge Pattern
オブジェクト指向入門.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
8.1 例外処理 8.2 catchブロックの検索 8.3 throwステートメント 8.4 例外とエラークラス 8.6 独自の例外
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
第4回JavaScriptゼミ セクション2-8 発表者 直江 宗紀.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
独習Javaゼミ第10回 セクション1~3 発表者 直江 宗紀.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
独習Java ・ 5.7  静的変数と静的メソッド ・ 5.8  ローカル変数と変数のスコープ  11月20日    小笠原 一恵.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
第2回独習Javaゼミ 第3章 セクション4~5 発表者 直江 宗紀.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
第5回 プログラミングⅡ 第5回
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀

7.1 インターフェイス(1) インターフェイスとは・・・ 「abstract」と類似性があるが・・・ →目的、使い方は異なる(説明は別頁) 7.1 インターフェイス(1) インターフェイスとは・・・ 「特定の機能概要」を定義したものが記述される 機能概要のため、宣言のみ 同一インターフェイスを実装したクラスは「その機能概要」が共通している 「abstract」と類似性があるが・・・ →目的、使い方は異なる(説明は別頁)

7.1 インターフェイス(2) 「abstract」やクラスの継承では・・・ 逆にインターフェイスの場合・・・ 7.1 インターフェイス(2) 「abstract」やクラスの継承では・・・ 多重継承が認められていない (一つのクラスへ複数のスーパークラスを継承することが出来ないこと) サブクラスとスーパークラスとの間に「クラス」の関係があること(型、オブジェクトの関係) 逆にインターフェイスの場合・・・ 複数のインターフェイスを実装可能 クラス関係は無いため自由にクラスへ実装できる

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として扱われ、強制的に静的定数値となる。

7.1 インターフェイス(3) implementsキーワード 実装時の一般形式記述 インターフェイスをクラスに実装するためのキーワード 7.1 インターフェイス(3) implementsキーワード インターフェイスをクラスに実装するためのキーワード 実装時の一般形式記述 clsModifiers class clsName extends superName implements intfList { // ここにインターフェイスを実装する ・ } 実装時、インターフェイスメソッドの戻り値の型を合わせなければ、コンパイルエラーとなる。

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.1 インターフェイス(5) メソッド1 メソッド1 貼り付け メソッド2 メソッド2 インターフェイス1 メソッド3 メソッド3 7.1 インターフェイス(5) メソッド1 メソッド1 メソッド2 貼り付け メソッド2 インターフェイス1 メソッド3 メソッド3 貼り付け メソッド4 メソッド4 インターフェイス2 クラス インターフェイスはクラス機能概要の「表面」を表す。 例えるなら容器の入り口に「貼付けられる物」である。

7.2 インターフェイスの参照(1) 同インターフェイスの変数及びメソッドを参照 intfRef.varName intfRef.mthName(args) インターフェイス内で定義した変数値を参照可 異なるクラスへ導入した同インターフェイスのメソッドの呼び出しが可能 ただし、同インターフェイス内以外の変数及びメソッドの呼び出しはできない

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

7.3 インターフェイスの継承(1) インターフェイスの継承 インターフェイスの拡張一般記述形式 クラス同様「extends」を利用する 7.3 インターフェイスの継承(1) インターフェイスの継承 クラス同様「extends」を利用する クラスは単体継承の制限があるが、インターフェイスには無い(多重継承が可能) 継承元インターフェイスのことを「スーパーインターフェイス」と呼ぶ インターフェイスの拡張一般記述形式 intfModifier interface intfName extends intfList{ // インターフェイスの本体 } 継承するインターフェイスをカンマで区切って複数記述する。

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にも受け継がれる。 ただし、継承したインターフェイスを実装したクラスは、スーパーインターフェイスのメソッドも含め全て実装しなければならない。 続く…

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

7.4 instanceof演算子(1) 「instanceof」演算子とは オブジェクトのクラス、実装されたインターフェイスについて確認する時に利用 記述一般形式 varName instaceof type type:クラス又はインターフェイス名 varName:オブジェクト参照変数

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{ 続く…

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() ; } 続く…

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() ; 続く…

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"

練習問題1 インターフェイス継承の部分において掲載したプログラム例を利用し、既存のメソッドsum()、sub()、disp()に加え、さらに乗算、除算を行うためのインターフェイス及びメソッドを加え、さらに、すべての(加減乗除)計算を行うように改良せよ。計算に用いる値は任意とする。また、値の入力方法は問わない。ヒント:インターフェイスの継承の特徴を利用して他のインターフェイスを付け足していくことが出来ること。

練習問題2 2次元座標値、3次元座標値における計算を行うプログラムを作成したい。次ページ図を元に座標値を加算するプログラムを作成せよ。計算に用いる値は任意とする。 例: 2次元(1,1)+(2,2)=(3,3) 3次元(1,1,1)+(1,2,1)+(2,1,2)=(4,4,4)

練習問題2.1図 abstract class Figure int a[] int b[] class Fig_3D 継承 void Sum() 継承 実装 class Fig_2D void Sum() interface Calc 実装 void Sum()

練習問題3 次ページ図を参考にしてI1~I4インターフェイスを作成、また、Xクラス、Wクラスを作り、Wオブジェクトを作る。このとき、Wオブジェクトに実装されているインターフェイスをinstanceof演算子によって調べ、また、オブジェクトがX型であるかも調べるプログラムを作成せよ。(インターフェイス及びクラス内のメソッドの有無は問わない)

練習問題3.1図 interface I1 interface I2 interface I4 拡張 拡張 実装 interface I3 class W 継承 実装 class X オブジェクト化するのは クラスW