“値を変更できるフィールドがもてない”・“抽象クラスしかもてない”のに何の為に記述するんだろう?と思って、インターフェイスを入力せずに実行してみたのですが、入力してもしなくても同じ結果が出ました。 同じ結果が出るならなぜ必要なんですか?
************* コード ****************************************
//のりものインターフェイス
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
interface,extend,implementの...
-
JAVAにFTP転送をサポートし...
-
抽象クラスをJUNITでテストする...
-
VB DLLプロジェクトについて
-
Daoクラスはまとめるべきですか
-
【C#】クラスのコンストラクタ...
-
クラス間の値渡しの仕方
-
「ラッパークラス」の存在意義...
-
equals()について
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
Java初級 引数に適用できません
-
複数の変数を宣言する時、同時...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
レコード件数の表示
-
エラーの意味を
-
Webアプリケーションのエラーメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
「ラッパークラス」の存在意義...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
オーバーライドとラッパーの違い
-
C# 「データが失なわれる可能性...
-
【C#】クラスのコンストラクタ...
-
JTextFieldの入力制限
-
c++でのヘッダーファイルの循環...
-
vb.net 自作プロパティの削除に...
-
「継承されたメソッドの可視性...
-
ASP.NETでの共通コードの書き方...
-
Javaのインスタンス化の構文の...
-
Javaで下線
-
メソッドの引数にクラス名を渡す
-
VB DLLプロジェクトについて
-
C#からDLLを呼びたいのですが・...
-
インターフェース型の使い方が...
-
委譲って何ですか?
-
C# 継承の問題で programに示さ...
おすすめ情報