プログラミング及び演習 第12回大規模プログラミング …mori/17Programming/PDFs/170715slide.pdf · プログラミング及び演習 第12回大規模プログラミング
プログラミング 第12回
-
Upload
milagro-unzues -
Category
Documents
-
view
23 -
download
0
description
Transcript of プログラミング 第12回
プログラミング第12回 2
クラス階層• あるクラスのフィールドやメソッドを増やして
新しいクラスを作ることを extend というキーワードで表す。
• 新しいクラスは元のクラスのサブクラス,元のクラスは新しいクラスのスーパークラスと呼ばれる。
• スーパークラスはより一般的なオブジェクトの挙動,サブクラスは特殊化された挙動の雛型とみることができる。
プログラミング第12回 3
Rectangleclass Rectangle{
int width; int height;
Rectangle(){setSize(10,20);}
Rectangle(int w, int h){
width=w; height=h; }
void setSize(int w, int h){
width=w; height=h; }
int getArea(){return width*height;}
}
プログラミング第12回 4
NamedRectangleclass NamedRectangle extends Rectangle {
String name;
NamedRectangle(){
// ここで super() の自動実行
name="NO NAME";
}
NamedRectangle(String name){
// ここで super() の自動実行
this.name=name;
}
}
プログラミング第12回 5
スーパークラスのコンストラクタの自動呼出し
• コンパイラの仕事• this(), super() が constructor
の最初に書かれていない場合は,コンパイラによって自動的に挿入される。
プログラミング第12回 6
継承 (inheritance) と is-a 関係• サブクラスはスーパークラスの属性を
すべて「継承」する。• サブクラスのインスタンス is a スーパ
ークラスのインスタンス .
• 合成と has-a 関係については,後に詳しく学ぶ。
プログラミング第12回 7
Override と overload
• override とはスーパークラスでのメソッドの定義を無効にしてやり直すこと。
• overload とは同じメソッド名で signatureの異なるメソッドを追加定義すること。元からあったメソッドは無効にはならない。
• final メソッドは overide できない。
プログラミング第12回 8
アクセス制御• private がついているフィールドやメソ
ッドはサブクラスの中から参照,呼び出しができない。
• public はその逆。 protected というのもあるが上級編で。
プログラミング第12回 9
抽象クラス• フックメソッドとテンプレートメソッド• テンプレートメソッドは抽象クラスで定
義を固定する。• フックメソッドは抽象クラスで具体化し
ない。• フックメソッドはサブクラスで具体的に
定義する。
プログラミング第12回 10
Player.java (List 12-11, p.69)
abstract class Player{
public abstract void play();
public void loop(int n){
for(int i=0; i<n; i++){
play();
}
}
}
フックメソッド
テンプレート
メソッド
プログラミング第12回 11
TextPlayer.java(List 12-12,p.70)
public class TextPlayer extends Player{
String text;
public TextPlayer(String text){
this.text=text;
}
public void play(){
System.out.println(text);
}
プログラミング第12回 12
TextPlayer.java (2)
public static void main(String[] args){
TextPlayer player=new TextPlayer(
" こんにちは ");
player.loop(3);
}
}
プログラミング第12回 13
実行例
こんにちはこんにちはこんにちは
プログラミング第12回 14
CharacterPlayer.java (1)
public class CharacterPlayer extends Player{ char moji; public CharacterPlayer(char moji){ this.moji=moji; } public void play(){ System.out.print(moji); }
プログラミング第12回 15
CharacterPlayer.java (2)
public static void main(String[] args){ CharacterPlayer player= new CharacterPlayer(' 浩 '); player.loop(10); }}
プログラミング第12回 16
実行例
浩浩浩浩浩浩浩浩浩浩
プログラミング第12回 17
PlayerTest.java
public class PlayerTest{ public static void main(String[] args){ Player p1=new TextPlayer(" ごきげんいかが?"); Player p2=new CharacterPlayer(' 浩 '); p1.loop(3); p2.loop(3); p1.loop(5); p2.loop(5); }}
プログラミング第12回 18
PlayerTest2.java
public class PlayerTest2{ public static void main(String[] args){ Player[] p={ new TextPlayer(" ごきげんいかが?"), new CharacterPlayer(' 浩 ')}; p[0].loop(3); p[1].loop(3); p[0].loop(5); p[1].loop(5); }}
プログラミング第12回 19
課題• 問題12-4• 問題12-5• 余裕があったら,問題12-6