質問: new CanvasView(this);のthisの部分をgetApplication()にしても正常に動いたのですが、getApplication()とcontextはどういう関係なのでしょうか? 質問内容がわかりにくいかもしれませんがよろしくお願いします。
回答: > > MainActivityクラスのcv = new CanvasView(this);のthisと > > > この「this」は「onCreate」を実行しているMainActivityクラスのインスタンスです。 そして、Activity | Android Developers によると > > java.lang.Object > > ↳ android.content.Context > > ↳ android.content.ContextWrapper > > ↳ android.view.ContextThemeWrapper > > ↳ android.app.Activity > > > なので、ActivityクラスはContextクラスの子クラスの子クラスの。。。まあ、ActivityクラスはContextクラスの「一種」という扱いになると思ってください。 同様に、MainActivityクラスもActivityクラスの子クラスになっているため、MainActivityクラスもContextクラスの「一種」という扱いになります。 「AはBの一種」という関係になっているクラス同士だと、「**A**のインスタンスを**B**のインスタンスとして扱ってよい」というのがオブジェクト指向の世界での一般的な考え方です。 よって「this」によって示されるMainActivityクラスのインスタンスはContextクラスのインスタンスとして扱ってもよいのです。 また、「Activity#getApplication())」で取得されるものに関しては、 > > public final Application getApplication () > > Return the application that owns this activity. > > > なので、MainActivityを保持・実行しているApplicationということになりますね。 で、Application | Android Developers によると > > java.lang.Object > > ↳ android.content.Context > > ↳ android.content.ContextWrapper > > ↳ android.app.Application > > > なのでApplicationクラスもContextクラスの一種であるとわかります。 でも、ApplicationクラスとActivityクラスは途中から親クラスが違っているので「ApplicationクラスがActivityクラスの一種」とかその逆とかは関係が成立しないのです。