第11週:super/subクラス、継承性、メソッド再定義

Slides:



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

1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) 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 コンストラクタとメソッドのオーバーロー.
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
Javaプログラムの変更を支援する 影響波及解析システム
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
もっと詳しくArrayクラスについて調べるには → キーワード検索
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
計算機プログラミングI 第8回 素数を見つけるアルゴリズム 継承とインスタンスメソッド クラスの設計 オブジェクトに機能を加える
第8回放送授業.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
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:

第11週:super/subクラス、継承性、メソッド再定義 subクラスとsuperクラス superクラスの継承 メソッド再定義 Java Programming(Step11)

Java Programming(Step11) super/subクラス superクラスとsubクラスは相対関係である。 superクラスはsubクラスを含む。 subクラスはsuperクラスの一部分です。 superクラスはsubクラスよりもっと一般的な定義である。逆に、subクラスはsuperクラスよりもっと具体的な定義である。 例:class Point と class Circle class Pointは一般的な点(x、y)ですが、class Circleは点(x、y)と半径(r)の定義です。 class Pointはsuperクラスです。class Circleはsubクラスです。 Point Circle Java Programming(Step11)

Java Programming(Step11) circleクラスの定義 PointクラスとCircleクラスはsuper-sub関係がありますが,その関係を使ってない,Circleクラスを独立的に定義します。 CircleクラスにはPointクラスを使って定義する場合、“has a” 関係と言われます。 “has a” 関係では、クラスオブジェクトが他のクラスのオブジェクトへの参照をメンバとして含みます。 public class Point { protected int x, y; // 点の座標 // パラメータなしのコンストラクタ public Point() { x = 0; y = 0;} // パラメータあるコンストラクタ public Point( int x, int y ) { this.x = x; this.y = y; } // メソッド public String toString(){ return “(“ + x + “,” + y + “)”; } public class Circle{ protected int x, y; // 円の中心座標 protected double r; //円の半径 // パラメータなしのコンストラクタ public Circle() {x = 0; y = 0; r = 0.0 ; } // パラメータあるコンストラクタ public Circle( int x, int y, double r) {this.x = x; this.y = y; this.r= r ; } // メソッド public String toString(){ return “Center =“ + “(“ + x + “,” + y + “)” + “; Radius =” + r ; } public class Circle { protected Point p; //円の中心座標 protected double r; //円の半径 // パラメータなしのコンストラクタ public Circle() {p=new Point(); r=0.0; } // パラメータあるコンストラクタ public Circle( int x, int y, double r) {p=new Point(x, y); this.r = r; } // メソッド public String toString(){ return “Center =“ + p.toString() + “; Radius =” + r ; } Java Programming(Step11)

Java Programming(Step11) subクラスの定義 PointクラスとCircleクラスはsuper-sub関係がありますので,その関係を使って,Circleクラスはsuperクラス(Pointクラス)を継承(inheritance)して定義する場合、“is a” 関係と言われます。 “is a”関係では、サブクラス型のオブジェクトもスーパークラス型のオブジェクトとして扱われます。クラスヘッダに(キーワードextendsを使って)明示します。 public class Point { protected int x, y; //点の座標 //パラメータなしのコンストラクタ public Point() { x = 0; y = 0;} //パラメータあるコンストラクタ public Point( int x, int y ) { this.x = x; this.y = y; } // メソッド public String toString(){ return “(“ + x + “,” + y + “)”; //(x,y) } public class Circle extends Point{ protected double r; //円の半径 //パラメータなしのコンストラクタ public Circle() {super(); r = 0.0; } //パラメータあるコンストラクタ public Circle( int x, int y, double r) {super(x, y); this.r = r; } // メソッド public String toString(){ return “Center =“ + super.toString() + “; Radius=” + r ; } Java Programming(Step11)

Java Programming(Step11) superクラスの継承 What? プログラムはそれまでに定義したスーパークラスのインスタンス変数やメソッドを新しいクラスが継承するよう指定することができます。この場合、新しいクラスをサブクラスと呼びます。 Why? 継承を使えばソフトウェアの再利用性を高めることができます。スーパークラスのインスタンス変数やメソッドをサブクラスに全て継承ように使うことができます。 How? サブクラスにインスタンス変数とコンストラクタとメソッドの定義。    super – X’s(super) クラス。    this - Y’s(sub) クラス。 スーパークラスのコンストラクタを呼ぶ。。 public Circle() {super(); r = 0.0; } public Circle( int x, int y, double r) {super(x, y); this.r = r; } 継承だから、省略する。 Class Y extends X{  X’s インスタンス変数;    X’s メソッド; Y’s 新しいインスタンス変数;   Y’s コンストラクタ;    Y’s 新しいメソッド; } Class X{  X’s インスタンス変数;   X’s コンストラクタ;    X’s メソッド; } public Y(パラメータ){  super(X’sパラメータ);   this.Y’s新しいパラメータ; } Y’s 新しいインスタンス変数の初期化。 public Circle() {super(); r = 0.0; } public Circle( int x, int y, double r) {super(x, y); this.r = r; } Java Programming(Step11)

Java Programming(Step11) メソッド再定義 When? スーパークラスのあるメソッドがサブクラスに適してない場合は、サブクラスの中でそのメソッドを再定義(上書き、オーバーライドと言う)します。 メソッド再定義とメソッド多重定義はどんな違いますか? メソッド再定義はスーパークラスのあるメソッドがサブクラス中でそのメソッドを再定義すること。 メソッド多重定義は同一名のメソッドをいくつ定義すること。 例:スーパークラスPointクラスの中のメソッドtoString()をサブクラスCircleクラスの中で再定義します。 public class Point { protected int x, y; //点の座標    。。。。。。  // メソッド public String toString(){ return “(“ + x + “,” + y + “)”; //(x,y) } public class Circle extends Point{ protected double r; //円の半径     。。。。。。 // メソッド public String toString(){ return “Center =“ + super.toString() + “; Radius=” + r ; } Java Programming(Step11)

Java Programming(Step11) クラス階層    public class Point { protected int x, y; //点の座標 //パラメータなしのコンストラクタ public Point() { x = 0; y = 0;} //パラメータあるコンストラクタ public Point( int x, int y ) { this.x = x; this.y = y; } // メソッド public String toString(){ return “(“ + x + “,” + y + “)”; //(x,y) } public class Circle extends Point{ protected double r; //円の半径 //パラメータなしのコンストラクタ public Circle() {super(); r = 0.0; } //パラメータあるコンストラクタ public Circle( int x, int y, double r) {super(x, y); this.r = r; } // メソッド public String toString(){ return “Center =“ + super.toString() + “; Radius=” + r ; } public class Cylinder extends Circle{ protected double h; //円柱の高さ //パラメータなしのコンストラクタ public Cylinder() {super(); h = 0.0; } //パラメータあるコンストラクタ public Cylinder( int x, int y, double r, double h) {super(x, y, r); this.h = h; } // メソッド public String toString(){ return super.toString() + “; 高さ = ” + h; } Point Circle Cylinder Java Programming(Step11)

Java Programming(Step11) クラス階層の例 階層関係を使ってない場合、 public class GraduateStudent{ String name; int grade; String department; String laboratory; // constructor public GraduateStudent(String name, int grade, String department, String laboratory) { this.name=name; this.grade=grade; this.department=department; this.laboratory=laboratory;} // method public char ShortName() { return name.charAt(0);} public String toString(){ return "Name :" + name +"(grade "+ grade+") in " + department+ " at "+ laboratory; } public class Human { public String name; // constructor public Human( String name) { this.name = name;} // methomd public char ShortName() { return name.charAt(0);} public String toString(){ return "Name: " + name; } public class Student{ String name; int grade; String department; // constructor public Student(String name, int grade, String department) { this.name=name; this.grade=grade; this.department=department;} // method public char ShortName() { return name.charAt(0);} public String toString(){ return "Name :" +name+ "(grade "+ grade+") in " + department; } Java Programming(Step11)

Java Programming(Step11)                 つづく super クラス – subクラス – subsub クラス      Human Student GraduateStudent superクラス – subクラス           Student GraduateStudent protected アクセス修飾子:限定公開アクセスのレベルは公開アクセスと非公開アクセスの中間です。スーパークラスの限定公開(protected)インスタンス変数には、そのスーパークラスのメソッド、サブクラスのメソッド、および同一パッケージ内にあるクラスのメソッドだけがアクセスできます。 public class GraduateStudent extends Student{ //String name; //int grade; String department; String laboratory; // constructor public GraduateStudent(String name, int grade, String department, String laboratory) { super(name, grade, department); this.laboratory = laboratory;} // method //public char ShortName() { //return name.charAt(0);} public String toString(){ return super.toString() + " at " + laboratory; } public class Human { public String name; // constructor public Human( String name) { this.name = name;} // methomd public char ShortName() { return name.charAt(0);} public String toString(){ return "Name: " + name; } public class Student extends Human{ //String name; int grade; String department; // constructor public Student(String name, int grade, String department) { super(name); this.grade=grade; this.department=department;} // method //public char ShortName() { //return name.charAt(0);} public String toString(){ return super.toString() + "(grade "+ grade+") in " + department; } Java Programming(Step11)

Java Programming(Step11) 出力のApplication プログラム public class ObjectCreationA { public static void main ( String args[] ) { Human A = new Human("Nonaka"); Student B = new Student("Hayasaka", 1, "CS"); GraduateStudent C = new GraduateStudent ("Tsuboi", 2, "DM", "MICC"); System.out.println("Human A ("+A.ShortName()+") -- " + A.toString() ); System.out.println("Student B ("+B.ShortName()+") -- " + B.toString() ); System.out.println( "Graduate Student C ("+C.ShortName()+") -- " + C.toString()); } Output in MS-DOS Window: Human A (N) – Name: Nonaka Student B (H) – Name: Hayasaka(grade 1) in CS Graduate Student C (T) – Name: Tsuboi (grade 2) in DM at MICC Java Programming(Step11)

Java Programming(Step11) MICC Laboratory 課題 点、辺、3角形、3角錐でクラス階層を作成せよ。 点、辺、3角形、3角錐のオブジェクトを出力するようにアプレットを作成しなさい。 Java Programming(Step11)