はじめに
何となくの理解で進めていたヒープ領域やstatic領域の話を、アウタークラスやインナークラス、ローカルクラスを通して学習する度に、身になってる心地がしていいです。
ただ、数学にしてもプログラミングにしても理解や実装するための手段であって、嬉しさに留めておかないって事に気を付けたいです。
実際、昨日の進捗と精度は悪かったので、今日は、あらかじめ調べる時間の上限を15分とします。
例えば、Loggingを触れた事がなくて、Java Goldの学習が止まったならば、15分で調べ上げて再度問題を解く。できなければ何分かかったか計り、スケジュールに影響がでるようなら、後回しにするという流れです。
今回は、Factory Methodが対象でした。
...メモした方が良さそうなところだけ残し、後は直接復習します。
内容
プロJava
Java Gold
・匿名クラス
①匿名クラスは、コンストラクタを定義できない。
static class Inner{
public static String message;
public void test() {
System.out.println(message);
}
}
public static void main(String[] args) {
Inner 新Inner = new Inner() {
@Override
public void test() {
System.out.println("上書きしました");
System.out.println(getMessage());
}
public String getMessage() {
return message;
}
};
新Inner.test();
}
ここで、super.messageとすると
static フィールド CH1_Q8.Inner.message には static にアクセスする必要があります
と警告がでる。
②これは、本来、superはオーバーライドされたメソッドのあるクラスを参照するので、staticを参照するならInner.messageかmessageで直接参照すればいいのでは?って意味でしょうか
・interfaceからdefaultメソッドを呼び出す際の話
複数のinterfaceを実現し、且つ、同名のdefaultメソッド実装した場合は、直接実現しているinterfaceがsuperで呼び出す事ができる。
それ以外のinterfaceから呼びだそうとすると、下記エラーがでる。
Illegal reference to super type CH1_Q11.C, cannot bypass the more specific direct super type com.example.demo.javaGold.CH1_Q11$D
・実現元のinterfaceと継承元のクラスに同名のメソッドがあった場合は、継承元のクラスが優先される。
・interface内でprivateでのメソッド宣言はできるが、interface内での利用を想定しているため本文が必要
private default void ts() {
}
Illegal combination of modifiers for the private interface method ts; additionally only one of static and strictfp is permitted
…
Enumのvalues()ってどこにドキュメントあるのだろう...と思っていたらAPIドキュメントにはないとの記載が...そんな事もあるのですね。
他、学習用のクラスにコメントアウトし記載。Java Goldは私の知識不足で解けない事が多いため、TCP/IP同様に特にブログへの記載をせずに学習する方針に切り替えたい。
感想
JUnitを早く触れたいです。
7日から触れられるといいなと思います。
光回線契約や一人暮らしの家具購入等でいっぱいでしたが、もっとできるので進めたいと思います。