1 / 19

プログラミング 第12回

プログラミング 第12回. スーパークラスとサブクラス yukita@k.hosei.ac.jp. クラス階層. あるクラスのフィールドやメソッドを増やして新しいクラスを作ることを extend というキーワードで表す。 新しいクラスは元のクラスのサブクラス,元のクラスは新しいクラスのスーパークラスと呼ばれる 。 スーパークラスはより一般的なオブジェクトの挙動,サブクラスは特殊化された挙動の雛型とみることができる。. Rectangle. class Rectangle{ int width; int height;

Download Presentation

プログラミング 第12回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミング 第12回 スーパークラスとサブクラス yukita@k.hosei.ac.jp プログラミング第12回

  2. クラス階層 • あるクラスのフィールドやメソッドを増やして新しいクラスを作ることを extend というキーワードで表す。 • 新しいクラスは元のクラスのサブクラス,元のクラスは新しいクラスのスーパークラスと呼ばれる。 • スーパークラスはより一般的なオブジェクトの挙動,サブクラスは特殊化された挙動の雛型とみることができる。 プログラミング第12回

  3. Rectangle class 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. NamedRectangle class 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 プログラミング第12回

More Related