独習Java勉強中 no.3

明示的にsuper() or this()を呼び出さない場合

サブクラスのコンストラクタにおいてsuper()やthis()などを呼び出さない場合は、暗黙的に最上位のクラスのコンストラクタから順次呼び出される。

class a {...}
class b extend a {...}
class c extend b {...}

class cのコンストラクタでは、superやthisなどを使用していないとa()、b()、c()の順に呼び出される。


interfaceで定数定義

少し前にjavaの講義で、「継承以外の手法で変数を共有できませんか?」と質問した。
そのときは、変数を保持するクラスを定義してそのインスタンスを持てばどうか、と返された。
正直、そのときは質問の意図としてinterfaceで変数を共有化できないだろうかと思っていたんだけども独習Java 第三版によると可能らしい。
たとえば、以下のinterface MaterialはどのクラスからもimplementされていないがMaterial.XXは参照可能なようだ。

// 独習Java 第三版 p.p. 211-212
// Material.java
interface Material{
  String bronze = "bronze";
  ...
}

// MaterialObject.java
abstract class MaterialObject{
  String material;
}

// Ball.java
class Ball extends MaterialObject {
  Ball(String material) {
    this.material = material;
  }
}

// MaterialObjects.java
class MaterialObjects {
  public static void main(String[] args) {
    Ball ball = new Ball(Material.bronze);  //interfaceのMateria
    ...
    System.out.println(ball.material);
  }
}

正直これでホントに動くのかよ?と思ったけど動く。定数共有ならinterfaceでも可能みたいだ。
それが、作法として好ましいかどうかは別として。


なんかある程度知っているところを読み直すのは疲れる。。。

ある程度講義でやったところを読み直すのはあまり面白くないなぁ。
言語のディテールの部分も嫌いじゃないし、今回みたいな教わったことと違ったことや、省略されて少しわかりにくい動作の所はためになるとは思うんだけどもっと知らない所を勉強したい。。。


もう少し進んだら例外処理でそれ以降はあまり知らないところだから楽しみだ。
なんか、「ですます」調で書くのが面倒くさくなってきた。