13 p public static void mainString args Person
多相性の利点(1/3) p 異なる型のイン スタンスをまと めて処理でき る. public static void main(String[] args) { Person p[] = new Person[3]; p[0] = new Person(); Person型の配列 p[1] = new Student(); を宣言 p[2] = new Teacher(); go. To. Lecture. Together(p, "オブジェクト指向プログラミング"); } public static void go. To. Lecture. Together( Person p[], String lecture) { for (int n = 0; n < p. length; n++) { p[n]. go. To. Lecture(lecture); } } 同じ実行文で異なる型を処理できる (見た目の型はPerson)
多相性の利点(2/3) p 新しい子クラス を作成して拡 張してみると… public class Staff extends Person { void go. To. Lecture(String lecture) { System. out. println(lecture + "を見学する"); } } オーバーライド
多相性の利点(3/3) p 新しいクラスを 追加してもプロ グラムの書き 換えを最小限 にできる. プログラムの書き 換えは不要! public static void main(String[] args) { Person p[] = new Person[4]; p[0] = new Person(); p[1] = new Student(); 新しいクラスの p[2] = new Teacher(); インスタンス p[3] = new Staff(); go. To. Lecture. Together(p, "オブジェクト指向プログラミング"); } public static void go. To. Lecture. Together( Person p[], String lecture) { for (int n = 0; n < p. length; n++) { p[n]. go. To. Lecture(lecture); } }
Android Studio を使った Androidアプリの開発(1/4) p Google が Eclipse への Android アプリ開発環 境の提供を廃止したため,Android Studio での 開発方法を説明する. Android Studio は Jet. Brains 社が開発したIDE で,Java と Kotlin で開発することが可能. p Py. Charm, Intelli. J IDEA も Jet. Brains 社製. p
Androidアプリの開発(2/4) 2. 「Empty Activity」を選んで「Next」.
Androidフレームワークにおける 多相性(1/3) p src の中の My. Activity. java を開いてみる. アプリの画面を表 このアプリのメイン画面を表すクラス すフレームワーク側 のクラス public class Main. Activity extends App. Compat. Activity { @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); } } p My. ActivityはApp. Compat. Activityを再利用 (拡張)して作成した,このアプリ固有のクラスである.
Androidフレームワークにおける 多相性(2/3) p on. Create() メソッドは Activity クラスの on. Create() をオーバーライドして実装されている. フレームワーク側のActivityクラスの内部 public class Activity extends Context. Theme. Wrapper implements Layout. Inflater. Factory 2, Window. Callback, Key. Event. Callback, On. Create. Context. Menu. Listener, Component. Callbacks 2, Window. On. Window. Dismissed. Callback, Window. Controller. Callback, Autofill. Manager. Autofill. Client { : protected void on. Create(@Nullable Bundle saved. Instance. State) { :
Androidフレームワークにおける 多相性(3/3) p My. Activity クラスの on. Create() メソッドは,画面 が表示される直前に呼び出される. n p アプリ固有の画面の初期化処理はここで行う. My. Activity クラスの on. Create() メソッドは,多相 性を用いてフレームワーク側から呼び出されている. public class Instrumentation { : public void call. Activity. On. Create(Activity activity, …) { : activity. performance. Create(icicle); public class Activity extends Context. Theme. Wrapper : final void perform. Create(Bundle icicle) { on. Create(icicle);
Androidフレームワークにおける 多相性(1/3) p src の中の My. Activity. java を開いてみる. このアプリのメイン画面を表すクラス public class My. Activity extends Activity { アプリの画面を表 すフレームワーク側 のクラス @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_my); } : p My. ActivityはActivityを再利用(拡張)して作成し た,このアプリ固有のクラスである.
Androidフレームワークにおける 多相性(2/3) p on. Create() メソッドは Activity クラスの on. Create() をオーバーライドして実装されている. フレームワーク側のActivityクラスの内部 public class Activity extends Context. Theme. Wrapper implements Layout. Inflater. Factory 2, Window. Callback, Key. Event. Callback, On. Create. Context. Menu. Listener, Component. Callbacks 2, Window. On. Window. Dismissed. Callback { : protected void on. Create(@Nullable Bundle saved. Instance. State) { :
Androidフレームワークにおける 多相性(3/3) p My. Activity クラスの on. Create() メソッドは,画面 が表示される直前に呼び出される. n p アプリ固有の画面の初期化処理はここで行う. My. Activity クラスの on. Create() メソッドは,多相 性を用いてフレームワーク側から呼び出されている. public class Instrumentation { : public void call. Activity. On. Create(Activity activity, …) { : activity. performance. Create(icicle); public class Activity extends Context. Theme. Wrapper : final void perform. Create(Bundle icicle) { on. Create(icicle);
- Slides: 25