Brembo ブレンボ ブレーキパッド(単品) フロント ブラック VOLKSWAGEN BEETLE 型式9CAWU 年式02/03~12/04 品番P85 045


 >  > Brembo ブレンボ ブレーキパッド(単品) フロント ブラック VOLKSWAGEN BEETLE 型式9CAWU 年式02/03~12/04 品番P85 045

Brembo カラー:シルバー ブレンボ ブレーキパッド(単品) BEAMS(ビームス) フロント ブラック VOLKSWAGEN BEETLE 型式9CAWU 年式02/03~12/04 品番P85 045

ポリモーフィズム(polymorphism)は、オブジェクト指向プログラにおける概念のひとつです。日本語では「多態性」「多様性」など呼ばれていますが、このままではイメージが掴めません
英文の意味に立ち戻ると「poly」には「複数の」であり、「morph」とは「姿を変える」という意味ですから、ポリモーフィズムは一つの事を複数の違った形で扱えたり、類似したいろいろな物を同じものとして扱える概念です。
ポリモーフィズムによって、プログラムをブラックボックのまま、より柔軟に扱うことが出来ます。

ポリモーフィズムは概念ですから、具体的な機能はいくつか考えられます。
例えば、継承とオーバーライドによって同じメソッド呼び出しであっても、常に同じふるまいではなく、そのときの目的に適したふるまいを自動的に切り替えることが出来るのもポリモーフィズムです 【送料無料】 165/65R14 14インチ TOPY トピー ディルーチェ DX10 4.5J 4.50-14 YOKOHAMA ヨコハマ エコス ES31 サマータイヤ ホイール4本セット【YOsum19】 。

また、継承関係にある参照変数間の代入や、インスタンスのキャストもポリモーフィズムです。

継承関係にある参照変数間の代入
これはインスタンスを作成する時に、参照変数の型をインスタンスの型ではなく継承関係にあるスーパークラスの型にすれば、そのインスタンスはあたかもスーパークラスの型として扱えるという物です。

継承で使ったNormalTVとSmartTVに在庫情報を追加して、異なる製品を同じ配列で管理する場合を考えてみましょう。

スーパークラス

public class NormalTV2 {
String serialNo;
String tvType;
NormalTV2(String tvType, String serialNo) {
this.tvType = tvType;
this.serialNo = serialNo;
}
NormalTV2(String serialNo) {
this.tvType = "NormalTV";
this.serialNo = serialNo;
}
void on() {
System.out.println("\t電源を入れます アドミレイション CX-5 KEEFW KE5FW KE5AW KE2FW KE2AW フロントフェイスグリル 塗装済 ADMIRATION BELTA ベルタ。");
}
void off() {
System.out.println("\t電源を切ります。");
}
void display() {
System.out.println("\t番組を視聴します。");
}
void channelChange() {
System.out.println("\tチャネルを切り替えます。");
}
void functions() {
on();
off();
display();
channelChange();
}
void printProductInfo() {
System.out.println(tvType + " : serial = " + serialNo);
}
}

サブクラス

public class SmartTV2 extends NormalTV2 {
SmartTV2(String serialNo) {
super("SmartTV ", serialNo);
}
void internet() {
System.out.println("\tインターネットにアクセスします。");
}
void recode() {
System.out.println("\t番組を録画します。");
}
void dvd() {
System.out.println("\tDVDを再生します。");
}
void functions() {
super.functions();
internet();
recode();
dvd();
}
}

スーパークラス、サブクラスを一緒に管理する処理

public class PolymorphismSample {
public static void main(String[] args) {
NormalTV2[] tvs = { new NormalTV2("0001"), new SmartTV2("0101"), new NormalTV2("0002"), 
new NormalTV2("0003"), new SmartTV2("0101") };
for(NormalTV2 tv : tvs) {
tv.printProductInfo();
}
}
}

実行結果

>java PolymorphismSample
NormalTV : serial = 0001
SmartTV : serial = 0101
NormalTV : serial = 0002
NormalTV : serial = 0003
SmartTV : serial = 0101
>

これにより、継承関係にあるいろいろな実装を同じ型として扱えますが、インスタンスがどのようなメソッドやフィールドを持っていたとしても、扱っている型で定義されているもの以外は使えません。使おうとするとコンパイルエラーになります。
このポリモーフィズムが成り立つのは、継承関係だけでなく実現関係でも構いません。継承関係も実現関係もない場合にはポリモーフィズムは成立せずコンパイルエラーになります。
※インターフェースはインスタンス化が行えないので、インターフェース自体をポリモーフィズムで扱う事はできません。

インスタンスのキャスト
サブクラスをスーパークラス型に変換するのをアップキャストと呼びます。アップキャストは、型の互換性チェックが簡単に行えるので自動的に行われます。
一方、スーパークラス型で扱っていたインスタンスを、元の型に戻すのはダウンキャストと呼びます。ダウンキャストは型の互換情報が無いので、明示的にキャスト指定する必要があります。
インスタンスが扱えるのは参照変数の型に定義されているものだけです。そこで、アップキャストして作ったサブクラスのインスタンスをダウンキャストすると、サブクラスの差分として定義したメソッドやサブクラスで定義したフィールド(スーパークラスのフィールドと同名の変数がサブクラスにある場合には変数の実体が切り替わる)が使えるようになります。

Brembo ブレンボ ブレーキパッド(単品) フロント ブラック VOLKSWAGEN BEETLE 型式9CAWU 年式02/03~12/04 品番P85 045


■当店は正規輸入元からの正規品を販売しております。※以下、輸入元HPより抜粋


注)こちらの商品は仕入れ元直送品となります。
仕入れ元直送品のため、当店が商品出荷時に配信しているお荷物問合せ伝票番号が記載された「出荷案内メール」はお出しできませんので予めご了承ください。


備考:《グレード》1.8T

※輸入車につきましては、シリアルナンバー17桁で適合品番が異なる場合があります。お車の車種名、型式、年式、シリアルナンバー17桁をご連絡ください。

■ブレンボ ブラックパッドの特徴

パフォーマンス
初期制動を重視したヨーロッパフィーリングを継承したモデル。

ブレーキ特性
ストリートでの使用を重視し摩擦係数を高めに設定することにより初期の効きを高めています。

ダスト量
レッドシムパッドに比べ摩擦係数が高い為、ダスト量は少し多めですが水洗いで流せるレベルとなっています。

耐フェード性
適正温度0~600℃

備考:《グレード》Z1

上記備考に注記事項がある場合は以下をご確認ください。ない場合は特に確認の必要はございません。

。しかし、スーパークラスをダウンキャストしてサブクラスの差分のフィールドやメソッドにアクセスすると実行時に例外が発生します。

NormalTVとSmartTVを使ったアップキャスト、ダウンキャストの例
アップキャスト

public class UpCastSample {
public static void main(String[] args) {
NormalTV2 tv = new SmartTV2("0101");
tv.printProductInfo();
tv.functions();
//tv.internet();
//tv.recode();
//tv.dvd();
}
}

実行結果

>java UpCastSample
SmartTV : serial = 0101
 電源を入れます。
 電源を切ります 【超低ダスト】Chevrolet シボレー コルベットコンバーチブル(C5) CY25E用 フロントブレーキパッド ☆送料無料☆ 当日発送可能(弊社在庫品の場合)。
 番組を視聴します。
 チャネルを切り替えます。
 インターネットにアクセスします。
 番組を録画します。
 DVDを再生します。
>

アップキャストした参照変数型に含まれるメソッドにアクセスする限りは実行できます。
(オーバーライドしたメソッドはオーバーライドした側のメソッドが使われます。)
しかし、ソースのコメントアウトを外して参照型変数型に含まれないメソッドにアクセスするとコンパイルエラーが出ます。

>javac UpCastSample.java
UpCastSample.java:8: エラー: シンボルを見つけられません
 tv.internet();
 ^
 シンボル: メソッド internet()
 場所: タイプNormalTV2の変数 tv
UpCastSample.java:9: エラー: シンボルを見つけられません
 tv.recode();
 ^
 シンボル: メソッド recode()
 場所: タイプNormalTV2の変数 tv
UpCastSample.java:10: エラー: シンボルを見つけられません
 tv.dvd();
 ^
 シンボル: メソッド dvd()
 場所: タイプNormalTV2の変数 tv
エラー3個
>

ダウンキャスト

public class DownCastSample {
public static void main(String[] args) {
SmartTV2 tv = (SmartTV2) new NormalTV2("0001");
tv.printProductInfo();
tv.functions();
}
}

実行結果
ダウンキャストを明示しない>場合は以下のコンパイルエラーになります。

>javac DownCastSample.java
DownCastSample.java:4: エラー: 不適合な型: NormalTV2をSmartTV2に変換できません:
 SmartTV2 tv = new NormalTV2("0001");
 ^
エラー1個
>

ダウンキャストを明示すると、コンパイルは通りますが実行時に例外が発生します。

>java DownCastSample
Exception in thread "main" java.lang.ClassCastException: NormalTV2 cannot be cast to SmartTV2
 at DownCastSample.main(DownCastSample.java:4)
>

アップキャストしたものをダウンキャストする

public class UpDownCastSample {
public static void main(String[] args) {
NormalTV2 ntv = new SmartTV2("0101");
SmartTV2 stv = (SmartTV2) ntv;
stv.printProductInfo();
stv.internet();
stv.recode();
stv.dvd();
}
}

実行結果
アップキャスト時にはアクセスできなかったメソッドがアクセスできるようになります

>java UpDownCastSample
SmartTV : serial = 0101
 インターネットにアクセスします。
 番組を録画します 【CUSCO】【クスコ】【ボディ補強パーツ】【ハイブリッドストラットバー】【タイプ 専用シャフト】【レガシィツーリングワゴン】【SUBARU】【スバル】【型式 BP5】【年式 03.5~09.5】フロント用。
 DVDを再生します FYRALIP ベンツ Cクラス W204 セダン 2008-2013 (H20からH25) 塗装済 Legatoルーフポイラー【___OCS】。
>

つまり、インスタンスのキャストはインスタンスの扱い方が変わるので、参照先のインスタンスが変わるわけではありません。

Brembo ブレンボ ブレーキパッド(単品) フロント ブラック VOLKSWAGEN BEETLE 型式9CAWU 年式02/03~12/04 品番P85 045

プログラムの部品化に戻る

{yahoojp}jpprem01-zenjp40-wl-zd-35577