ディクセル Premiumタイプ ブレーキパッド リア ボルボ XC60


 >  > ディクセル Premiumタイプ ブレーキパッド リア ボルボ XC60

ディクセル Premiumタイプ ブレーキパッド CIVIC リア ボルボ XC60 NV350キャラバン

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

ポリモーフィズムは概念ですから、具体的な機能はいくつか考えられます。
例えば、継承とオーバーライドによって同じメソッド呼び出しであっても、常に同じふるまいではなく、そのときの目的に適したふるまいを自動的に切り替えることが出来るのもポリモーフィズムです 【プロジェクトミュー】TYPE HC-CS(タイプエイチシー・シーエス) ニッサン グロリア GLORIA用 Y32(ABS無)系 リヤブレーキパッド 品番:R231 。

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

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

継承で使った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電源を入れます [ACRE] アクレ ブレーキパッド フォーミュラ800C フロント用 フォルクスワーゲン ゴルフIII 1.8 CLI 1HABS 95.10~95.1 ベンチディスク車 ABS付車 ※代引不可 ※北海道・沖縄・離島は送料2160円。");
}
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
>

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

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

ディクセル Premiumタイプ ブレーキパッド リア ボルボ XC60

 
入数:1セット(左右)

価格と性能を両立させたプレミアム(Premium)タイプ

●ノーマルパッド並みの価格とロングライフながら、制動力、ダスト性能に優れたスポーツパッド
●パッドだけでなく、同時にローターもディクセル製品に交換することにより更に高いパフォーマンスを発揮!
●ノーマルパッドと違い、日本人の趣向、日本市場を徹底的にリサーチし、開発

材質:セラミック系複合材
適正温度:0~500℃
ステージ:ストリート、ワインディング(ノーマル)
※ワインディング(ノーマル) = 通勤や買物等で、ワインディング路を通常走行される方

■適合車種
ボルボ XC60
リア D4 DD4204TXC 2015年07月~
リア T5 2.0 AWD/T6 3.0 AWD DB4204TXC/DB420XC/DB6304TXC 2009年06月~2015年07月
リア T5 2.5 AWD/T6 2.0 AWD DB525XC/DB420XC 2015年07月~

※Premiumタイプはストリート専用です。サーキットでのご使用はできません。万が一、サーキットで使用し早期摩耗等を起こしたとしても、弊社及びディクセル社では一切責任を負いかねますことを予めご了承ください。

こちらの商品は適合確認が必ず必要です。
カートに入れた後、注文フォームの備考欄に車輌情報をご入力ください。
車輌情報がありませんと、再度車輌情報をお伺いする場合もあり発送にお時間がかかりますのでご協力の程宜しくお願いいたします。


商品の詳細な情報はメーカーサイトをご確認ください。

■品番
1654496
■関連事項
ディスクパッド ディスクパット ブレーキパット ブレーキ ディスク パッド パット Premium type プレミアムタイプ
■メーカー情報
DIXCEL でぃくせる
■適合情報
VOLVO ヴォルヴォ リヤ リアー リヤー rear 背後 後方
■その他
automobile motorcar オートモービル モーターカー カー 車 自動車 車両

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

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
 電源を入れます。
 電源を切ります チャージスピード FORESTER SH5 A型 B型 FRP GRILL FINISHER。
 番組を視聴します。
 チャネルを切り替えます。
 インターネットにアクセスします。
 番組を録画します。
 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
 インターネットにアクセスします。
 番組を録画します ACRE (アクレ) 品番:247 ライトスポーツ ブレーキパッド フロント用 レガシィセダン/B4 BC5 89.2~93.10。
 DVDを再生します 【SSR】 EXECUTOR EX02 (エグゼキューター EX02) 19インチ 8.0J PCD:120 穴数:5 inset:3 フラットブラック [ホイール1本単位] [H]。
>

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

ディクセル Premiumタイプ ブレーキパッド リア ボルボ XC60

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

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