#丸太の独習Java 独習記

来年4月に入社する企業から、研修課題として読むように指示されている「独習Java」を読みながら、知っておいた方が良さそうな箇所をツイートしたまとめです。 第6章~第12章についてツイートしました。 独習JavaでJavaを勉強しようとしている方の参考になれば幸いです。 Javaについて詳しい方で、内容に間違いなどあればTwitter(@maruTA_bis5)までご指摘いただけますと幸いです。
0
丸太/Takayuki MARUYAMA @maruTA_bis5

【予告】ノートの代わりにTwitterでメモをとり後でまとめてあわよくばその道の方からのフィードバックを得る勉強法を実践します。TLが埋まる場合はミュート、一時的なアンフォロー・ブロック等の手段で回避をお願いします。ハッシュタグ→#丸太の独習Java

2013-10-08 09:25:44

第1章~第5章を読み終わってからツイートすることを思いついたため、第1章(Javaの基礎)、第2章(クラスとメソッド)、第3章(Javaの制御ステートメントの概要)、第4章(制御ステートメントと演算子)、第5章(クラスの作成)はありません。

第6章 継承

丸太/Takayuki MARUYAMA @maruTA_bis5

継承:あるクラスの状態・動作を別のクラスに分化する機能。コードの効果的な再利用につながる。OOPのメリットの一つ #丸太の独習Java

2013-10-08 13:47:11
丸太/Takayuki MARUYAMA @maruTA_bis5

継承のキーワードはextends クラス変数、インスタンス変数、ローカル変数と同様に、継承したクラスにスーパークラスと同じ名前の変数があれば、スーパークラスのものは隠される #丸太の独習Java

2013-10-08 13:48:42
丸太/Takayuki MARUYAMA @maruTA_bis5

思ったけどこれ「独習」じゃないような・・・ #丸太の独習Java

2013-10-08 13:49:05
丸太/Takayuki MARUYAMA @maruTA_bis5

同じシグネチャにメソッドがスーパークラスにもある場合、オーバーライドされる。実行時のポリモーフィズムの実現 #丸太の独習Java

2013-10-08 13:49:46
丸太/Takayuki MARUYAMA @maruTA_bis5

スーパークラスのメソッドorコンストラクタを呼ぶときはsuperキーワードを使う(C#ならbase,PHPならparent) #丸太の独習Java

2013-10-08 13:50:32
丸太/Takayuki MARUYAMA @maruTA_bis5

2つのクラス間に継承関係を形成するには: class clsName2 extends clsName1 { //クラス本体 } この場合、clsName2はclsName1のサブクラスであり、clsName1はclsName2のスーパークラスである #丸太の独習Java

2013-10-08 13:52:19
丸太/Takayuki MARUYAMA @maruTA_bis5

extends clsNameが無いクラス宣言の場合、コンパイラはそのクラスはObjectクラスがスーパークラスであると判断。Objectクラスについては後述 #丸太の独習Java

2013-10-08 13:53:12
丸太/Takayuki MARUYAMA @maruTA_bis5

クラスはただ1つのスーパークラスを持つが、サブクラスはいくつあってもかまわない。デフォルトのサブクラスとして設定されるObjectクラスを頂点としたクラス階層構造ができあがる #丸太の独習Java

2013-10-08 13:58:02
丸太/Takayuki MARUYAMA @maruTA_bis5

クラスを継承することで、そのクラスにはスーパークラスで定義された状態(変数)と動作(メソッド)が継承される。スーパークラスで定義された変数やメソッドはサブクラスにも存在することになる #丸太の独習Java

2013-10-08 14:00:13
丸太/Takayuki MARUYAMA @maruTA_bis5

サブクラス内の静的変数orインスタンス変数がスーパークラスの変数と同じ名前の場合は、スーパークラスの変数は隠蔽され、特に指定しない限りサブクラスの変数が用いられる #丸太の独習Java

2013-10-08 14:01:26
丸太/Takayuki MARUYAMA @maruTA_bis5

(続き)この場合、スーパークラスの変数にアクセスするにはsuper.varNameの形式を用いる。(varNameはスーパークラスの変数名)super.super.varNameとして2階層(以上)上のスーパークラスにアクセスすることは出来ない。親まで。 #丸太の独習Java

2013-10-08 14:03:29
丸太/Takayuki MARUYAMA @maruTA_bis5

変数は型が違っていても名前が同じなら隠蔽される。super使わずに識別する方法がないから? #丸太の独習Java

2013-10-08 14:05:02
丸太/Takayuki MARUYAMA @maruTA_bis5

メソッドのオーバーライド:同じシグネチャを持つメソッドをサブクラスで宣言すると、スーパークラスのメソッドは隠蔽される。変数とは違い、シグネチャが違えば隠蔽されない #丸太の独習Java

2013-10-08 14:06:30
丸太/Takayuki MARUYAMA @maruTA_bis5

Javaの「動的メソッドディスパッチメカニズム」では、実行中のオブジェクトのクラスに基づいて適切なオーバーライドメソッドを選択する。該当オブジェクトを参照する変数の型ではない。従って、どのオーバーライドメソッドが利用されるかは実行時に決定する #丸太の独習Java

2013-10-08 14:08:27
丸太/Takayuki MARUYAMA @maruTA_bis5

(続き)オーバーライドメソッドの選択は実行時に行われるため、シグネチャが同じでも戻り値の型が違えばコンパイルエラーとなる #丸太の独習Java

2013-10-08 14:09:30
丸太/Takayuki MARUYAMA @maruTA_bis5

実際にオブジェクトを参照する変数の型がスーパークラスであったとしても、参照されるインスタンスの型によって実行されるメソッドが変わる #丸太の独習Java

2013-10-08 14:11:50
丸太/Takayuki MARUYAMA @maruTA_bis5

継承とメソッド:変数と同様、同じシグネチャのメソッドを定義したせいで隠れてしまったスーパークラスのメソッドを使うには、super.methodName(args)とする。スーパークラスのメソッドにさらに操作を追加する場合など有効 #丸太の独習Java

2013-10-08 14:15:46
丸太/Takayuki MARUYAMA @maruTA_bis5

継承とコンストラクタ:スーパークラスから継承された状態(変数)も、適切に初期化する必要がある。スーパークラスのコンストラクタはサブクラスのそれよりも先に呼ばれなければならない #丸太の独習Java

2013-10-08 14:18:32
丸太/Takayuki MARUYAMA @maruTA_bis5

明示的にスーパークラスのコンストラクタを呼び出すにはsuper(args);を使う。ただし、サブクラスのコンストラクタの最初のステートメント出なければならない。 #丸太の独習Java

2013-10-08 14:19:29
丸太/Takayuki MARUYAMA @maruTA_bis5

同一クラスの他のコンストラクタを呼び出すthis(args);も、コンストラクタの最初のステートメントでなければならない。従って、super(args);とthis(args);を同じコンストラクタで用いることは出来ない。 #丸太の独習Java

2013-10-08 14:20:51
丸太/Takayuki MARUYAMA @maruTA_bis5

明示的にsuper(),this(),その他のコンストラクタを呼び出さない場合、コンストラクタによってsuper()=スーパークラスの既定のコンストラクタの呼び出しが挿入される。このコンストラクタには引数がないことに注意 #丸太の独習Java

2013-10-08 14:22:23
丸太/Takayuki MARUYAMA @maruTA_bis5

クラスの修飾子:abstract = インスタンス化できない, final = 継承(拡張)できない, public = 他から見える, [指定なし] = 現在のパッケージからのみ見える #丸太の独習Java

2013-10-08 14:24:57
1 ・・ 10 次へ