Javaにおいてクラスは単一継承しか出来ないため
継承は慎重に行わないと・・・ 後で継承したくても出来ないってことに・・・ インターフェイスは多重継承が出来るから・・・ クラスの継承ではなくインターフェイスの実装で出来ないか考える 例えば スレッドは継承ではなくRunnableやCallableの実装で・・・ ではどのような時に継承したらよいのだろうか??? 継承すると言うことは・・・ サブクラスはスーパークラスとしても振舞わなければならない is-aの関係である サブクラスis a スーパークラス 良く似た関係にhas-aの関係がある こちらは他方のクラスを包含している場合である 例えば旅行に行くプロジェクトがあった場合 移動手段には自動車、バス、電車、飛行機などがある これらの共通点として 乗り物であるタイヤがある等が考えられる 乗り物がis-aの関係でありタイヤがhas-aの関係である 自動車 is a 乗り物 自動車 has a タイヤ 同様にis-aの関係として 旅行と国内旅行、海外旅行、温泉旅行、日帰り旅行などが考えられる is-aの関係の中でも特に結び付きの強いものを厳選して 継承するのが良いと考えられる PR |
![]() |
![]() |
APIリファレンスで<? extends T>や<? super T>が出てくる時がある
中には両方同時に出てくることも・・・^^; java.util.Collectionsの中には・・・ public static<T> int binarySearch(List<? extends Comparable<? super T>> list, T key) Comparable<? super T>>はクラスTまたはそのスーパークラスに関する 比較を行うためのインターフェイスであり List<? extends Comparable<? super T>>はそのインターフェイスを実装した クラスまたはそのサブクラスを格納できるリストを意味する <? super T>はクラスTとそのスーパークラスを <? extends T>はクラスTとそのサブクラスを表す |
![]() |
![]() |
小数の演算結果が手計算と合わない・・・TT
桁数が少なければ整数として計算してしまうのだが・・・^^; BigDecimal を使えばいいんだけど・・・ strictfp というクラス、インターフェース、メソッド修飾子がある strictfp で修飾されるとその内部すべての式が FP-strict になる FP-strict とは IEEE-754 で定められた精度である FP-strict でない場合より高い精度で演算が行われる可能性がある (x86プロセッサでは80ビットで行う) float:符号1ビット 指数8ビット 仮数23ビット double:符号1ビット 指数11ビット 仮数52ビット x86拡張精度:符号1ビット 指数15ビット 仮数64ビット |
![]() |
![]() |
排他処理には synchronized を用いればよいが・・・
volatile ってなんだろう??? スレッド処理を含むクラス群をコンパイルした時に どちらかで修飾してくれというエラーメッセージが出る時がある これはスレッドがフィールドをスレッド固有の作業領域に コピーして処理を行い・・・その後フィールドに戻すのためで タイミングによっては値が保証されないため コンパイル時に警告しているのである そのため synchronized で立ち入り禁止にしてしまうか(メソッド、ステート) volatile で修飾しスレッド間の作業領域として 共有のフィールドを使用するよう宣言するのである(フィールド修飾子) |
![]() |
![]() |
![]() |
![]() |
忍者ブログ [PR] |