読者です 読者をやめる 読者になる 読者になる

せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Java】「実装」と「振る舞い」の違い。クラスはオブジェクトではない。 パーフェクトJava学習感想文 その3

パーフェクトJavaを読んで改めてJavaを振り返り中。

息も絶え絶えです。

経緯については学習記録その1をご参照ください。

以下、学んだこと。

 

「実装」と「振る舞い」の違い

「実装」と「振る舞い」は別の概念。
共通した振る舞いのことを「型」と呼ぶ。

こうやって別物だと理解できれば、
インタフェースや抽象クラスも「型」であることが理解できる。
「クラス」は「型」の部分的な概念。
 

型定義を行う言語機能としてクラスとインタフェースの2つがあり、オブジェクトと変数が型を持ちます。

なるほど。


言語機能によらずに定義されている型が「基本型」

クラス・インタフェースではない型の定義があって、それが基本型。
基本型はメソッドを持たない。

基本型は特別なんです。
基本型はメソッドを持ちませんが
専用の演算子は書けます。
123 + 123
とか。

by師匠。


 

メソッドの実行は変数だけができる、という訳ではない

本の中にこの一文が。
たしかにそうだ。

  • レシーバーが変数でないがメソッドを実行できるケース

 →レシーバーがオブジェクトであり、変数に代入されていない場合
"hoge".length(); ←hogeはStringオブジェクト。

 

  • レシーバーが変数であるがメソッドを実行できないケース

 →変数が基本型を格納している場合
int a = 123; ←aの格納している123は基本型のためメソッドを持たない。





 

クラスはオブジェクトではない、訳ではない

※ここは指摘を受けて修正しました。
詳しくはこちら

Classクラスのインスタンス生成時にクラス名を引数にすることで
Stringクラスオブジェクトが生成できる。

Class<?> clazz = loader.loadClass("String");

 
なるほど。


今日は寝ます。