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

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 コンストラクタとメソッドのオーバーロー.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
3-3 クラス図の関係その2.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Bridge Pattern
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
~手続き指向からオブジェクト指向へ[Ⅱ]~
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
第4回JavaScriptゼミ セクション2-8 発表者 直江 宗紀.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
独習Javaゼミ第10回 セクション1~3 発表者 直江 宗紀.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
第8回放送授業.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとプログラミング (Algorithms and Programming)
第2回独習Javaゼミ 第3章 セクション4~5 発表者 直江 宗紀.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト・プログラミング 第10回 オブジェクト指向設計のキモ.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

6.4 継承とメソッド(1) オーバーロードメソッドとは オーバーライドされると スーパークラスメソッドを参照する方法が必要 6.4 継承とメソッド(1) オーバーロードメソッドとは サブクラスにおいて、親となるスーパークラスのメソッドと同じ名前のメソッドをサブクラスに作ることにより、スーパークラスメソッドを隠し、その上にサブクラスのメソッドに置き換えるというもの。 オーバーライドされると メソッドが呼び出された時、オーバーライドされたメソッドが呼ばれてしまう。 スーパークラスメソッドを参照する方法が必要

6.4 継承とメソッド(2) スーパークラスメソッドの参照呼出記述 super.mthName(args) ; mthName:メソッド名,args:引数リスト 利用利点 オーバーライド前のメソッドを利用しつつ、サブクラス化で新しく追加した機能を使いたい時。 スーパークラスのメソッドを使う場合、別途オブジェクトを作ることなく利用可。

継承とメソッドの関連図 ClsクラスMthメソッドが InheクラスMthメソッドに 「オーバーライド」されている Super.Mth(args)を使うことによって、 本来呼べないスーパークラスのオーバーライドされたメソッドにアクセスし、同様の処理を書くことなく処理させることが可能となる Inheクラス 呼出 Mthメソッド Mainメソッド 呼び出し Mthメソッド InheクラスのMthメソッドを呼んでも ClsクラスのMthメソッドは呼ばれない 継承 Clsクラス

6.5 継承とコンストラクタ(1) クラスの状態と動作 スーパークラスコンストラクタの呼び出し super(args) ; 6.5 継承とコンストラクタ(1) クラスの状態と動作 スーパークラスにもクラス定義がある。 サブクラスコンストラクタだけの初期化では不足。 スーパークラスコンストラクタの呼び出し super(args) ;

6.5 継承とコンストラクタ(2) 同一クラスのコンストラクタの呼び出し this(args) ; 6.5 継承とコンストラクタ(2) 同一クラスのコンストラクタの呼び出し this(args) ; 上記の呼び出しや、スーパークラスコンストラクタの呼び出しを明示的に使い分け、動作を指定する使い方が可能。 (ただし、コンパイラではどちらも使われない場合、オートで「super(args)」が呼び出される)

6.6 クラスの修飾子(1) Classキーワードの前に指定可能修飾子 6.6 クラスの修飾子(1) Classキーワードの前に指定可能修飾子 abstract インスタンス化できないクラス final 拡張不可クラス public 他の全てから参照可クラス (指定無しの場合、同パッケージからでしかクラス参照不可) 3つの修飾子はオブジェクト指向プログラミングにおいて、重要な意味を持つ。

6.6 クラスの修飾子(2) abstractクラス そのクラスは抽象クラスであることを指す。 6.6 クラスの修飾子(2) abstractクラス そのクラスは抽象クラスであることを指す。 1つ又は複数のサブクラスによって実装される機能を宣言する役割を持つ。 「機能の宣言」のため基本的には「中身を持たない」 (インスタンス化可能な抽象クラスを有形クラスという) abstractクラスを「容器」に例えるなら、そのサブクラスは「中身」に相当する

abstractクラスとそのサブクラスの関係 メソッド1 メソッド1 継承 メソッド2 メソッド2 メソッド3 メソッド3 abstractクラス abstractクラスのサブクラス1 メソッド1 継承 内容は違う メソッド2 メソッド3 クラス内の構成は同じだが、各メソッドの中身は異なる abstractクラスのサブクラス2

6.6 クラスの修飾子(3) finalクラス そのクラスの実装したメソッドをオーバーライド不可にする役割を持つ。 6.6 クラスの修飾子(3) finalクラス そのクラスの実装したメソッドをオーバーライド不可にする役割を持つ。 publicクラス アプリケーション内のどのクラスからもアクセス可能であるクラスとする。 (指定が無ければ同パッケージ内でしかやり取りできない)

6.6 クラスの修飾子(4) 「パッケージ」とは… クラス、インターフェイスの集合 6.6 クラスの修飾子(4) 「パッケージ」とは… クラス、インターフェイスの集合 既定のパッケージは1ファイルに記述されたクラス、インターフェイスの集合 次章である7章で詳しく解説される

演習問題 リスト6に示すMatrixクラスを元に行列を扱う2次元配列のインスタンス変数を増やし、用意できた2つの行列の加算を行うことが出来るようにしたい。継承を行い、結果を示すプログラムを作成せよ。尚、扱うデータは任意の値とする。 抽象クラス「Language」があるとし、英語、中国語、フランス語、日本語について、各言語が母国語である国名について出力されるようなプログラムを作成せよ。

サンプルプログラム リスト1 class Cls{ void Mth(int a){ サンプルプログラム リスト1 class Cls{ void Mth(int a){ System.out.println("ClsクラスMthメソッド..."+a) ; } class Inhe extends Cls{ super.Mth(a) ; System.out.println("inheクラスMthメソッド..."+a) ; public class InheritansClass{ static public void main(String args[]){ int a=32 ; Inhe in=new in() ; in.Mth(a) ; [出力結果] ClsクラスMthメソッド...32 inheクラスMthメソッド...32

サンプルプログラム リスト2 class Cls{ void Mth(int a){ サンプルプログラム リスト2 class Cls{ void Mth(int a){ System.out.println("ClsクラスMthメソッド..."+a) ; } class Inhe extends Cls{ System.out.println("inheクラスMthメソッド..."+a) ; public class InheritansClass{ static public void main(String args[]){ int a=32 ; Cls cls=new cls() ; cls.Mth(a) ; Inhe in=new in() ; in.Mth(a) ; [出力結果] ClsクラスMthメソッド...32 inheクラスMthメソッド...32

サンプルプログラム リスト3(page1) class Super_cls{ int s_c ; Super_cls(){ System.out.println("Super_clsクラスコンストラクタ...") ; this.s_c=1 ; } class Inherit_cls extends Super_cls{ int in_1 ; Inherit_cls(){ System.out.println("Inherit_clsクラスコンストラクタ...") ; this.in_1=2 ; class Inherit_cls_2 extends Inherit_cls{ int in_2 ; Inherit_cls_2(){ System.out.println("Inherit_cls_2クラスコンストラクタ...") ; this.in_2=3 ;

サンプルプログラム リスト3(page2) public class InheritanceTest{ static public void main(String args[]){ Inherit_cls_2 in_c_2=new Inherit_cls_2() ; System.out.println("Super_clsで定義のインスタンス変数s_c ..."+in_c_2.s_c) ; System.out.println("Inherit_clsで定義のインスタンス変数in_1 ..."+in_c_2.in_1) ; System.out.println("Inherit_cls_2で定義のインスタンス変数in_2..."+in_c_2.in_2) ; } [出力結果] Super_clsクラスコンストラクタ... Inherit_clsクラスコンストラクタ... Inherit_cls_2クラスコンストラクタ... Super_clsで定義のインスタンス変数s_c ...1 Inherit_clsで定義のインスタンス変数in_1 ...2 Inherit_cls_2で定義のインスタンス変数in_2...3

サンプルプログラム リスト4(page1) class Super_cls{ int s_c ; Super_cls(int a){ this.s_c=a ; } class Inherit_cls extends Super_cls{ int in_1 ; Inherit_cls(int a,int b){ super(a) ; this.in_1=b ; class Inherit_cls_2 extends Inherit_cls{ int in_2 ; Inherit_cls_2(int a,int b,int c){ super(a,b) ; this.in_2=c ;

サンプルプログラム リスト4(page2) public class InheritanceTest{ static public void main(String args[]){ Inherit_cls_2 in_c_2=new Inherit_cls_2(1,2,3) ; System.out.println("Super_clsで定義のインスタンス変数s_c ..."+in_c_2.s_c) ; System.out.println("Inherit_clsで定義のインスタンス変数in_1 ..."+in_c_2.in_1) ; System.out.println("Inherit_cls_2で定義のインスタンス変数in_2..."+in_c_2.in_2) ; } [出力結果] Super_clsで定義のインスタンス変数s_c ...1 Inherit_clsで定義のインスタンス変数in_1 ...2 Inherit_cls_2で定義のインスタンス変数in_2...3

サンプルプログラム リスト5 public class AbstractClass{ サンプルプログラム リスト5 public class AbstractClass{ static public void main(String args[]){ Figure f=new Circle() ; f.display() ; //抽象クラスのサブクラス //同士で中身を入れ替えられる f=new Triangle() ; } [出力結果] Circle Triangle //抽象クラス Figure abstract class Figure{ void display(){ } class Circle extends Figure{ System.out.println("Circle") ; class Triangle extends Figure{ System.out.println("Triangle") ;

サンプルプログラム リスト6 class Matrix{ int matrix[][],dimension ; サンプルプログラム リスト6 class Matrix{ int matrix[][],dimension ; Matrix(int number){ this.dimension=number ; this.matrix=new int[this.dimension][this.dimension] ; for(int i=0;i<this.dimension;i++){ for(int j=0;j<this.dimension;j++){ this.matrix[i][j]=1 ; } void Input_matrix(int row,int line,int number){ this.matrix[row][line]=number ;