
“値を変更できるフィールドがもてない”・“抽象クラスしかもてない”のに何の為に記述するんだろう?と思って、インターフェイスを入力せずに実行してみたのですが、入力してもしなくても同じ結果が出ました。 同じ結果が出るならなぜ必要なんですか?
************* コード ****************************************
//のりものインターフェイス
interface iVehicle{
void vShow();
}
//材料インターフェイス
interface iMaterial{
void mShow();
}
//車クラス
class Car implements iVehicle,iMaterial{
private int num;
private double gas;
public Car(int n, double g){
num = n;
gas = g;
System.out.println("ナンバー"+ num + "ガソリン量"
+gas + "の車を作成しました。");
}
public void vShow(){
System.out.println("車のナンバーは" + num +"です。");
System.out.println("ガソリン量は" + gas + "です。");
}
public void mShow(){
System.out.println("車の材質は鉄です。");
}
}
class Sample1{
public static void main(String[] args){
Car car1 = new Car(1234, 20.5);
car1.vShow();
car1.mShow();
}
}
**************************************************************
<実行結果>
「ナンバー1234ガソリン量20.5の車を作成しました。
車のナンバーは1234です。
ガソリン量は20.5です。
車の材質は鉄です。 」
インターフェイスを記述してもしなくても、同じく上記の結果が
出ました。
※ちなみに抽象クラスもいったい何なのかよく分りません。
No.2
- 回答日時:
質問のコードはインタフェースを理解するためには無意味です。
> class Sample1{
> public static void main(String[] args){
> Car car1 = new Car(1234, 20.5);
+ iVehicle vehicle1 = car1;
+ iMaterial material1 = car1;
> car1.vShow();
< vehicle1.vShow();
> car1.mShow();
< material1.mShow();
> }
> }
このように少なくともインタフェース型の変数を使わないと。
実際に使う場合はインタフェースを継承するクラスも複数あるのが普通です。
インタフェースはJavaにおいて多重継承を実現するための手段です。
多重継承はオブジェクト指向で重要な概念ですが、プログラミング言語処理系での実装には難しい部分があり、また使いこなすのにも難しい部分があります。
このためJavaでは一般的なクラスによる多重継承はなくし、インタフェースにより多重継承の一部機能だけを実現しています。
ありかとうございます。
でも初心者の私には難しい言葉ばかり・・・
言葉の意味を調べながら読み直してみます。
ただ出来れば2つ程教えていただけないでしょうか?
◆よく「オブジェクト指向」という言葉を聞きますが、どういう意味
なんですか?
◆+ iVehicle vehicle1 = car1;
+ iMaterial material1 = car1;
↑この部分、+をつける理由って・・・(?)
No.1
- 回答日時:
さて、このインターフェースですが私はネット上や参考書でまともな説明を見たことがありません。
大半は著者が理解していないことが多いです。よってインターフェースが理解できないのは当たり前なので心配いりません。私はまずなぜジェームズゴスリングがこのような仕組みを取り入れたかを考えました。そもそもオブジェクト指向とは何か。深く考えました。するとこのオブジェクト指向に隠された社会的陰謀が見えてきます。
Javaに限らずあなたもこの「インターフェイス」の恩恵を受けています。色々なところで受けています。どこで受けているか考えてみましょう。見つかった瞬間すべてを理解できます。
あなたはとてつもない喜びを感じるでしょう。
その喜びをJavaに実装したジェームズの気持ちを共有することになるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このエラーメッセージの意味を...
-
C# 「データが失なわれる可能性...
-
「継承されたメソッドの可視性...
-
ファイルパスが取得出来ない(P...
-
compareToにおける「自然順序付...
-
オブジェクト指向のインターフ...
-
ASP.NETでの共通コードの書き方...
-
デバッグ時に「Source not found」
-
c++でのヘッダーファイルの循環...
-
オーバーライドとラッパーの違い
-
【C#】クラスのコンストラクタ...
-
「ラッパークラス」の存在意義...
-
C#からDLLを呼びたいのですが・...
-
VBがオブジェクト指向言語でな...
-
VB DLLプロジェクトについて
-
ゲッターを使わないで変数にア...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
エクセルVBAで、条件に一致する...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB DLLプロジェクトについて
-
(vba)他のアプリケーションの右...
-
【C#】クラスのコンストラクタ...
-
メソッドの引数にクラス名を渡す
-
C# 「データが失なわれる可能性...
-
C#からDLLを呼びたいのですが・...
-
「IOException は対応する try ...
-
c++でのヘッダーファイルの循環...
-
ファイルパスが取得出来ない(P...
-
「ラッパークラス」の存在意義...
-
抽象クラスをJUNITでテストする...
-
ASP.NETでの共通コードの書き方...
-
interface,extend,implementの...
-
「ひとつのインターフェースで...
-
javanoリストのオブジェクト作...
-
オーバーライドとラッパーの違い
-
System.Collections.Generic.Li...
-
VBがオブジェクト指向言語でな...
-
compareToにおける「自然順序付...
-
Commons-Discovery.jarとは?
おすすめ情報