• ベストアンサー

「インターフェイス」って何の為に必要なんですか?

“値を変更できるフィールドがもてない”・“抽象クラスしかもてない”のに何の為に記述するんだろう?と思って、インターフェイスを入力せずに実行してみたのですが、入力してもしなくても同じ結果が出ました。 同じ結果が出るならなぜ必要なんですか? ************* コード **************************************** //のりものインターフェイス 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です。  車の材質は鉄です。              」 インターフェイスを記述してもしなくても、同じく上記の結果が 出ました。 ※ちなみに抽象クラスもいったい何なのかよく分りません。

noname#205525
noname#205525
  • Java
  • 回答数12
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
  • ukiuni
  • ベストアンサー率100% (2/2)
回答No.8

説明合戦に参戦します。 インターフェースは「ルール」です。 実世界で言うと、「単三型乾電池」のことです。単三型乾電池は、円柱状の形をしており、プラスが盛り上がっていて、マイナス方向からは電子が放出されるという決まりがあります。 電子機器は、「単三型乾電池」の形が合うように作られているので、単三型乾電池を使うことが出来ます。つまり、円柱状の凹みがあり、マイナス方向から電子を受け取るように出来ています。 しかし、「単三型乾電池」は単なるルールなので、この世の中には「単三型乾電池」は存在しません。あるのは「アルカリ単三型乾電池」や「ニッカド単三型乾電池」です。 「アルカリ単三型乾電池」や「ニッカド単三型乾電池」は「単三型乾電池」をimplementsしているクラスです。 さて、ここでなぜインターフェースを利用するかというと、電子機器が、「アルカリ単三型乾電池」を利用するように作成したとしましょう。例えば、利用できるアンペア数が固定されているものします。そうすると、「ニッカド単三乾電池」は使えないようになってしまいます。また、今後新しい電池が開発されても、動揺に利用できません。例えば「オキシドライト単三乾電池」も使えません。 こうなると、電子機器の使い勝手が悪くなってしまいます。 なので、電子機器は最低限のルールだけを利用して電池にアクセスするようにします。このルールが「単三型乾電池」です。 どうでしょう?

noname#205525
質問者

お礼

すみません!ずっと前に読んでいてお礼を書いたつもりで いたのに、見直していたらまだ書いてなかったことに気づいて・・・ 乾電池という例えがちょっとばかり難しかったですが、 でもよく理解できました。 今更ですが、ありがとうございました。

その他の回答 (11)

回答No.12

>同じ結果が出るならなぜ必要なんですか? 基本的にインターフェイスっていうのは、再利用性や抽象度、保守性などを高めるために利用されます。よって、質問者さんのソースでも、現状では、あまりインターフェイスの必要性が感じられないかもしれませんが、そのソースを元に機能拡張していこうとすれば、がらりと変わってきます。 そもそも、『入力してもしなくても同じ結果が出ました。』っていうのも、単にインターフェイスやオーバーライドと同等の処理をカスタムメソッドで実装したまでであって、同じ結果となるような実装をしたんだから当たり前なわけですよ。 ※ちなみに抽象クラスもいったい何なのかよく分りません。 クラスも抽象クラスもインターフェイスもオブジェクト指向の世界では、全て同じものです。強いてあげれば、右に行くに連れて抽象度が上がっていきます。 クラス → 抽象クラス → インターフェイス #1さんのおっしゃられていた「『インターフェイス』の恩恵」について、以下に私なりの表現で説明してみようと思います。 教えて!goo > カテゴリ一覧 http://oshiete.goo.ne.jp/oshiete_list.html 上記のサイトは、ここを利用している方々ならば一度は訪れたことがあると思います。これもまた、オブジェクト指向によって構成されています(その他にも有名なのであれば、本の目次なんかもオブジェクト指向で形成されていますよね)。 具体的には、本来「カテゴリ一覧」というサイトがなくても、ここを利用することは可能ですが、きちんと分類されていれば自分のよく利用しているカテにすぐアクセスできます。ここで、汎用的な「カテゴリ」というのを「インターフェイス」として抜き出し、そこで利用される「属性」や「操作」を事前に仕様として定義しておくわけですよ(各カテゴリー内の内容は違えど、新規に質問したり、回答したり・・といったような機能は、どのカテでも同じですよね)。 質問者さんの言うように、インターフェイスを使わずとも同じ機能を実現することは可能ですが、ただ上記のような階層型の設計にしておけば(厳密にはCompositeパターンと言います)、また新たに「Web3.0」とか、「サードライフ」、「次期WindowsOS」にと、カテゴリの追加が必要になったとしても、非常に効率的に機能拡張ができるというわけなんですよ。 それと同時に、クラス化による分類で、他のクラスへの影響度も小さく品質をより高めることも可能という訳です。 #6さんがおっしゃっていたのは、イベントハンドラ(イベントドリブン、イベントリスナーとも)のことですね。 java.awt.event インタフェース ActionListener http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/event/ActionListener.html 私と「イベントハンドラ」との出会いは、iアプリを勉強していた時のことですが、上記のサイトなどでも「何てシンプルなんだろう。」と思ったりするものです。(まだ、勉強を始めたばかりの人には、その偉大さがピンとこないかなあ・・。) 最後に、ワンポイントアドバイスです。(これがわかれば、SJC-A合格も間近。) ・クラスは、インターフェイスを実装(implements)することは可能。 ・インターフェイスは、クラスを継承(extends)出来ないが、他のインターフェイスによる継承(extends)は可能。 ・インターフェイスに他のインターフェイスを実装(implements)することは、不可能。

noname#205525
質問者

お礼

初心者の私には難しい言葉が多くて理解できないことも 結構ありましたが、 >具体的には、本来「カテゴリ一覧」というサイトがなくても、ここを利用することは可能ですが、きちんと分類されていれば自分のよく利用しているカテにすぐアクセスできます。ここで、汎用的な「カテゴリ」というのを「インターフェイス」として抜き出し、そこで利用される「属性」や「操作」を事前に仕様として定義しておくわけですよ。 ↑ここの説明が例えもよく、分かりやすかったです。 でもすごいですね、専門家のような解説だなと思いました。 自分のこの説明を全部理解出来るような知識をみにつけられる ようになりたいです。道のりは遠いですが・・・ ありがとうございました。

回答No.11

/** 最近、多相性のコードを作成していたので、ちょっとだけここでも遊んでみた。 以下公式サイトによると正確には5段階に分かれていて、常に「エンジン」と「モーター」の2つが動いているわけではないらしいが、それも実装すると冗長的になるのでここでは割愛。 toyota.jp プリウス > 機能・メカニズム http://toyota.jp/prius/dynamism/ths2/index.html */ import java.util.*; import static java.lang.System.*; //のりものインターフェイス interface iVehicle{  void vShow(); } //材料インターフェイス interface iMaterial{  void mShow(); } //燃費クラス class MileagePrius implements iVehicle{  public void vShow(){   System.out.println("リッター35.5km/Lです。");  } } //モータークラス class Motor implements iMaterial{  public void mShow(){   System.out.println("\nモーターを使用中です。\n");  } } //エンジンクラス class Engine implements iMaterial{  public void mShow(){   System.out.println("\nエンジンを使用中です。\n");  } } //ハイブリッド車クラス class HybridCar{  private String shashu;  public HybridCar(String ss){   this.shashu = ss;   System.out.println(shashu + "の車を運転します。");   if(ss.equals("プリウス")){    MileagePrius mp = new MileagePrius();    mp.vShow();   }  }  void THSII(int num){ //ハイブリッドシステム   iMaterial im;   if(num == 1){    im = new Motor();    im.mShow();   }else if(num == 2){    im = new Engine();    im.mShow();   }else{    System.out.println("\n半角の1か2を入力してください。\n");   }  } } //テストクラス public class Sample1{  static public void main(String... _$){   HybridCar Prius = new HybridCar("プリウス");   Scanner scan = new Scanner(in);   System.out.println("\n 以下の何れかの数字を入力して、ハイブリッド・シナジー・ドライブの開始。");   System.out.println("1 → 「モーター」");   System.out.println("2 → 「エンジン」");   for(;;) Prius.THSII(scan.nextInt());  } }

noname#132124
noname#132124
回答No.10

8番の方の「ルール」というのが、自分の理解と近いです。例えば public interface Action {   String doAction(String string, Object object, int i) throws Exception; } というインターフェイスをimplementsするクラスは、 String型の引数ひとつとObject型の引数ひとつとint型の引数ひとつを取り String型の値を返し Exceptionという例外を発生させる可能性のある doActionという名前のメソッド を必ず実装しなければなりません。 言い方を変えると、上のインターフェイスをimplementsしているクラス(正確にいうと具象クラス)は String型の引数ひとつとObject型の引数ひとつとint型の引数ひとつを取り String型の値を返し Exceptionという例外を発生させる可能性のある doActionという名前のメソッド を必ず持っている、持っていることが保証されるということです。 なので、上のインターフェイスをimplementsしているクラスならば、世界中の誰が作ったどんな名前のクラスであろうと、インスタンス化してdoActionを呼べるわけです。インターフェイスというルールを適用してくれたクラスは、安心して同じシグニチャのメソッドを呼べるというイメージです。同じシグニチャのメソッドとは、メソッド名、戻り値、引数構成、例外発生可能性定義がまったく同じメソッドという意味です。 これだけの説明で理解できるとは思われませんが、特に思うのは、オブジェクト指向の三つのポイントといわれる カプセル化 継承 ポリモフィズム(多態性) の中のポリモフィズムの実現方法がインターフェイスの利用であり、自分としては インターフェイスの理解 = オブジェクト指向の理解 にかなり近いくらい、インターフェイスの利用方法を理解することは重要だということです。インターフェイスの理解なしには、有名なGoFのデザインパターンなども理解できません。真剣にオブジェクト指向のプログラムを勉強していかれるということならば、2・3年かけてでも完全に理解した方がよいかと思います。また、インターフェイスを自分のものにした方が、プログラミングがより楽しくなるとも思いますし。

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.9

> 研修の講師には後回しでいいと言われたし、使い道が少しということは、そこまで実務で使用することはないんですかね? そうでもないです、結構よく使います。多いときは3割:7割でインターフェイスとクラスがあるようなことも。 後回しでよいのはインターフェイスの本質的な意味とか、使い道のことであって、文法的な宣言方法とか、既存インターフェイスのソースの読み方とかは今からでも理解して下さい。「インターフェイスを活用したプログラムが書ける」ようになるのはずっと先でもいいですが、「インターフェイスを活用したプログラムが読める」のはすぐに必要なスキルです。 あとは、初心者であればインターフェイスよりも、メソッドの引数と戻り値など、先に理解しておくべきこともおおいということですね。

noname#205525
質問者

お礼

お礼遅くなってすみませんでした。 そうですね、実際いまだに引数や戻り値をちゃんと理解できて なくてこんがらがる事があるので、まずは基本的なことの方を ちゃんと覚えなきゃいけないと思います。 例えば引数や戻り値ではないけど、Stringクラスの中にもたくさんの メソッドがあって、そういうのを活用して記述するような問題が 多く出てくるので、よく使用するメソッドくらいはちゃんと理解したい ものです。 色々解説していただき、ありがとうございました。

  • inu_poti
  • ベストアンサー率66% (4/6)
回答No.7

この質問、面白いので、私の私見を書きます。 オブジェクト指向言語  共通のデータ(プロパティ、その昔は共通変数とか呼ばれれたもの)と実行内容あるは実行する単位(メソッド、その昔は関数とか、サブルーチンと呼ばれた物)をまとめたもの(クラス)をプログラムの単位 とする言語 インタフェース  御質問者の例で、車が材料で乗り物なら、いっぱいクラスを作って 携帯の材料とか、パソコンの材料とか、そしたら材料だけの操作したいし!乗り物なら、バスとか電車とか飛行機とか、乗り物だけの操作したいし!と思うと使い道が少しあるかな!  私の知る限り、Javaの元になったC++ではインタフェースはなかった 気がします。

noname#205525
質問者

お礼

回答ありがとうございました。 >オブジェクト指向言語 プログラムの単位ですか・・・ ごめんなさい、やっぱりよく分らないです。 もうちょっと言語の意味が分ってきたら理解できるかも。 >インタフェース 車が材料で乗り物なら、いっぱいクラスを作って 携帯の材料とか、パソコンの材料とか、そしたら材料だけの操作したいし!乗り物なら、バスとか電車とか飛行機とか、乗り物だけの操作したいし!と思うと使い道が少しあるかな! なんとなくおっしゃりたい事の意味はわかります。 研修の講師には後回しでいいと言われたし、使い道が少しということは、そこまで実務で使用することはないんですかね?

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.6

趣味プログラマの勝手な意見を少し述べてみます。 CUI で一回実行して出力しておしまいなら、インターフェースなどほとんど必要ないでしょう。 でも、appletなど、GUIで、ボタンクリックやキー入力、マウスの動作をトラップするためには、Listnerといわれるインターフェース群を使いこなさなければ、まともなGUIプログラムは出来ません。 CUIでも、標準入力というのがあるけど、GUI入力の複雑さの比ではないので。 オブジェクトの理解も、GUIプログラムの方が、ボタンやパネルを自分で作ることで、よりヴィジュアルに理解できると思う。 抽象クラスも、似たようなパネルを沢山作ってすげ替えをするときにその有用性を実感する(これは自己経験、できあがった喜びは格別\(^o^)/)。 私の勝手な結論:オブジェクト指向(特に、インターフェース、抽象クラス)は、GUIプログラミングをものすごく楽にするために存在する。 Javaに限らず、この概念なしに、今ほど使いやすいGUIプログラミングはありえなかった、と、私は思っています。

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.5

インターフェイスがなくて困ったことがないのですから、価値がわからないのも仕方ないでしょう。 インターフェイスの本質的な意味や活用の仕方の説明があっても、その説明自体が意味不明に思えるので、ますますわからないでしょう。 これらは仕方ないと思います。 まずは、教科書どおり理解して、そういうものなんだと思って下さい。 私は実務プログラミングでいろんな経験をし、苦労をし、なぜ自分はいつも同じような無駄なプログラミングばかり書いているのだろうと考えていたら、あるとき「あッそうか、ここでインターフェイスをつかえばいいんだ、そうすればうまくいく」と気付くようになりました。 ※それでも結局うまくいかないほうが多いですが・・・

noname#205525
質問者

お礼

ありがとうございました。 そうなんですよね。IT用語辞典などでインターフェイスの意味を調べても、その説明の意味自体理解出来ないんです。 他にも“BufferedReaderクラス”・“Stringクラス”・“Integerクラス”など最初は意味も分らず入力してたものが、その説明が出てきてから「何故ここでこ~なるんだ?」って考えだすとどんどん深みにはまって分らなくなるんです。 全て意味を理解しながら作成しようとしてたら全然勉強が進まなくなってしまうので、もうそういうものなんだと思ってやっていくしかないですかね? しかも、研修のとき講師に聞いたら、「インターフェイスは後回しでいいんで飛ばして進めて下さい」と言われました。 そ~いうことは先に言ってくれ!

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

ANo.2のお礼から > ◆よく「オブジェクト指向」という言葉を聞きますが、どういう意味 >  なんですか? それまでの機能(関数)中心の考え方からデータ構造(クラス)中心の考え方に移したプログラミングの方法です。オブジェクト指向をちゃんと説明しようとすると本一冊くらいは書けてしまいますので、本を読んで勉強してください。 # Javaの本じゃないけど # 『オブジェクト指向入門 第2版 原則・コンセプト』 # を勧めときます > ◆+ iVehicle vehicle1 = car1; >  + iMaterial material1 = car1; >   ↑この部分、+をつける理由って・・・(?) ああ、これは引用に対する追加行という程度の意味です。 同様に<で始めている行は前の行を置き換えるつもりです。

noname#205525
質問者

お礼

ありがとうございます。 今は参考書を早く終わらせることで手いっぱいですが、その後で 薦めて下さった本読んでみたいと思います。

  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.3

ここのコミュニティでは、過去何度も同じような質問がされています。 中にはよい質問と回答もあるので、Javaカテゴリ(本カテゴリです)にて「インターフェイス」等の言葉で検索してみて下さい。 http://oshiete.goo.ne.jp/search/search.php?status=select&PT=&from=&nsMT=&mt_opt=a&qatype=qa&c=253&ct0=205&ct1=221&ct2=253&st=all&tf=all&MT=%A5%A4%A5%F3%A5%BF%A1%BC%A5%D5%A5%A7%A5%A4%A5%B9+interface&ct_select=1&c=253

  • rinkun
  • ベストアンサー率44% (706/1571)
回答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では一般的なクラスによる多重継承はなくし、インタフェースにより多重継承の一部機能だけを実現しています。

noname#205525
質問者

お礼

ありかとうございます。 でも初心者の私には難しい言葉ばかり・・・ 言葉の意味を調べながら読み直してみます。 ただ出来れば2つ程教えていただけないでしょうか? ◆よく「オブジェクト指向」という言葉を聞きますが、どういう意味  なんですか? ◆+ iVehicle vehicle1 = car1;  + iMaterial material1 = car1;   ↑この部分、+をつける理由って・・・(?)

関連するQ&A

  • インターフェイスを2つ以上実装

    こんにちは。 高橋麻奈さん著の「やさしいJava」を使ってJavaを学んでいるのですが、インターフェイスのところでつまずいています。 インターフェイスは2つ以上クラスに実装できるということですが、本に書いてあるサンプル文では2つ実装されているものが載っています。 それにさらにもう一つインターフェイスを自分で書き加えて実装させてみたのですが、エラーが出てコンパイルできませんでした。書き加える前の状態では普通にコンパイル&実行できました。 ということは書き加えた部分が間違ってるはずなのですが自分には何処が間違っているのかわかりません。 以下にそのコード全文を載せておきますね。(色インターフェイス関連が書き加えた部分) どなたかわかるかたがいらっしゃいましたらご回答お願いします。 //のりものインターフェイス interface iVehicle { void vShow(); } //材料インターフェイス interface iMaterial { void mShow(); } //色インターフェイス interface iColor(); { void cShow(); } //車クラス class Car implements iVehicle, iMaterial, iColor { 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("車の材質は鉄です"); } public void cShow() { System.out.println("車の色は黄色です"); } } class Sample4 { public static void main(String args[]) { Car car1 = new Car(1234, 20.5); car1.vShow(); car1.mShow(); car1.cShow(); } }

    • ベストアンサー
    • Java
  • 抽象クラス、インターフェイスについて

    少し長いですが、以下にコードを書きました。これでコンパイルすると、13個ほどエラーが出て、何がなんだかわかりません。何が間違っているのでしょうか?よろしくお願いします。ちなみに本を見ながらの独学です。 //のりものインターフェイス interface iVehicle { abstract void show(); } //車くらす class Car implements iVehicle { private int num; private double gas; public Car(int n, double g)) { num = n; gas = g; System.out.println("ナンバー" + num +"ガソリン量" + gas +"の車を作成しました"); } public void show() { System.out.println("車のナンバーは" + num +"です"); System.out.println("ガソリン量は" + gas +"です"); } } //飛行機クラス class Plane extends Vehicle { private int flight; public Plane(int f) { flight = f; System.out.println("便" + flight +"の飛行機を作成しました"); } public void show() { System.out.println("飛行機の便は" + flight +"です"); } } class sample8 { public static void main(String args[]) { iVehicle ivc[]; ivc = new iVehicle[2]; ivc[0] = new Car(1234, 20.5); ivc[1] = new Plane(232); for(int i=0; i<ivc.length; i++){ if(vc[i] instanceof Car) ivc[i].show(); } } }

    • ベストアンサー
    • Java
  • "add"とは?f

    class Car { int num; double gas; void setNum(int n) { num = n; System.out.println("ナンバーを" + num + "にしました。"); } void setGas(double g) { gas = g; System.out.println("ガソリン量を" + gas + "にしました。"); System.out.println("この車は満タンで40リットル入ります。"); } void show() { System.out.println("車のナンバーは"+num+"です。"); System.out.println("ガソリン量は"+gas+"です。"); } } class Prog11_1 { public static void main(String args[]) { Car car1 = new Car(); Car car2 = new Car(); car1.setNum(1234); car1.setGas(20.5); car2.setNum(5678); car2.setGas(30.8); car1.addGas(10.0); car2.addGas(10.0); car1.show(); car2.show(); } } 上記のプログラムの足りないところを補い、完成させるというものなんですが、"add"というのは一体どのような役割を持っているものなんでしょうか? 分かる方いらっしゃいましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaの戻り値のコード

    Java初心者です。returnの例文で分からない所があります。 (1)考え方として car1.setNumGas(1234, 20.5); の時点で void setNumGas(int n, double g) はvoid setNumGas(1234, 20.5)になり 次にgetNum( ) そのものを引っ張ってきているので、 ナンバーを調べました という文字まで一緒に引っ張らないのでしょうか? なぜ 次の行のretun文だけを拾うのですか? (2)returnのイメージがまだ出来ていません。 int number = car1.getNum(); とした時点で int getNum()  にジャンプし、 その中の returnを見つけ、 そしてreturnが numを使っている所をコードを下に降りて順に探しに行く というイメージで合ってますか? -------------------------------------------------------------------- return num; →よーし探しに行こう! まずdouble getGas()の中 → うーんない 次にvoid setNumGas(int n, double g) の中 { num = n;    →   お、あった! nは今1234だな、だから表示結果は1234 --------------------------------------------------------------------------- こんな認識で合ってますでしょうか? class Car { int num; double gas; int getNum() { System.out.println("ナンバーを調べました。"); return num; } double getGas() { System.out.println("ガソリン量を調べました。"); return gas; } void setNumGas(int n, double g) { num = n; gas = g; System.out.println("車のナンバーを" + num + "にガソリン量を" + gas + "にしました。"); } void show() { System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } class Sample6 { public static void main(String[] args) { Car car1 = new Car(); car1.setNumGas(1234, 20.5); int number = car1.getNum(); double gasoline = car1.getGas(); System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは"+ number + "ガソリン量は" + gasoline + "でした。"); } }

    • ベストアンサー
    • Java
  • 初心者なので教えてほしいです。

    下記のコードなんですが、どこか間違っていますか? テキスト通りに入力したはずなんですが、 『メソッド本体がないか、abstractとして宣言されています』 というエラーが出てしまいます。 どういう意味なのか分らなくて・・・ **************************************************** //車クラス class Car{ int num; double gas; } //車クラスのオブジェクトを作成する class Sample1{ public static void main(String[] args); { Car car1; car1 = new Car(); car1.num = 1234; car1.gas =20.5; System.out.println("車のナンバーは" +car1.num+ "です。"); System.out.println("ガソリンの量は" +car1.gas+ "です。"); } } *************************************************************

    • ベストアンサー
    • Java
  • 別ファイルのclassの読み込みについて

    Javaを勉強し始めたばかりのものです。 購入した参考書を見ながら勉強していますが、表題の件の項目で参考書ではうまくいくように表記されておりますが、実際にやってみると下記エラーが表示されます。 --------------------------------------------- C:\XXXXXXXXXX>javac ../../sample/Sample1.java ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ エラー 2 個 ------------------------------------------------------ ちなみに下記はソースとなります。 -------------------------------------------- 【Car.java】 //Carクラス class Car { private int num; private double gas; public Car(){ num = 0; gas = 0.0; System.out.println("車を作成しました。"); } public void setCar(int n, double g){ num = n; gas = g; System.out.println("ナンバーを" + num + "ガソリン量を" + gas + "にしました。"); } public void show(){ System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } 【Sample1.java】 class Sample1 { public static void main (String args[]){ Car car1 = new Car(); car1.show(); } } --------------------------------------------------- なんとなくエラーが出るだろうとはわかりますが、上記の記載方法だとやはりうまくいかないのでしょうか? お忙しいところ申し訳ありませんが、どなたかご教示の程お願いいたします。

    • ベストアンサー
    • Java
  • インタフェイス実装と抽象クラス継承を同時に使うには??

    私はjava初心者です、今練習問題で困っています。 1つのクラスに抽象クラスとインターフェイスを 実装することはできるのでしょうか? 例えば abstract class Car { private String gas; public void getGas(int gas) { this.gas = gas; } public abstract void enjin(); } interface Flying extends Pet { void show(); } 上のインタフェイスと抽象クラスを同時に下のクラスに継承、実装しよう とすると、どんな風にかけば良いのでしょうか class Zoon { public Zoon() { super(); } public void enjin() { System.out.println("どどどどど"); } public void show() { System.out.println("いいくるまだ"); } }

    • ベストアンサー
    • Java
  • パッケージのエラーについて

    パッケージのエラーについてなのですが、コンパイルできずにいます。 C:\java\13\r内に Car.java rensyu1.javaをおいています。 コマンドプロンプトには C:\java\13> と表示させています。classpathの設定はしていません。 システム内の環境設定はしました。 ------------------------Car.java package r; class Car { private int num; private double gas; public Car() { num = 0; gram = 0.0; System.out.println("車を作成しました。"); } public void setCar(int n, double g) { num = n; gram = g; System.out.println("ナンバー:" + number + "ガソリン:" + gas + "です。"); } public void show() { System.out.println("車のナンバーは" + number + "です。"); System.out.println("ガソリン量は" + gram + "です"); } } -------------------------------------rensyu1.java package r; class rensyu1 { public static void main(String args[]) { Car car1 = new Car(); car1.show(); } } やさしいjavaという本を参考にしていまして 教科書どうりですと javac r\rensyu1.java java r.rensyu1でコンパイルできるはずでしたが 「シンボルを見つけられません」というエラーが出ます。 気になるのが、ファイルr内にCar.classがありません。 他にもjavac -classpath . rensyu1.java を入力してみましたが、こちらは 「無効なフラグです」というエラーがでます。 教えていただけると助かります。宜しくお願いします。

    • ベストアンサー
    • Java
  • クラスを呼び出した時のオブジェクト名の出力について

    ご覧いただいてありがとうございます。 java勉強中の者です。現在クラスについての勉強をしています。 質問内容ですが、クラスを呼び出した時に対象のオブジェクトの名前を表示させたいというものです。 以下、サンプルのコードを記載してその後詳しい説明をします。 class Car{//車の情報を保持 int number; //車のナンバーを保持 double gas;//ガソリンの量を保持 void show(){//車の情報を出力 NAMEの部分は後程説明します System.out.println("車のナンバーは"+ number +"です。"); System.out.println("車のガソリン量は"+ gas +"です。"); } public class Sample1{ public static void main(String[] args){ Car car1 = new Car();//car1のオブジェクト car1.number = 1111; car1.gas = 10; Car car2 = new Car(); car2.number = 2222; car2.gas = 20; car1.show(); } 以上がサンプルのプログラムです。 上記のclass Car内のvoid show()の中にあるSystem.out.printlnの2つの文あたりです。 「車のナンバーは~」の直前に、呼び出したオブジェクトの名前を出力したいのです。今回であれば、メインメソッド内の一番下の「car1.show();」のオブジェクト名を表示させたいです。 具体的には「car1の車のナンバーは1111です。」と表示させたいです。 関数か何かがあるのかと思い、少し調べてみましたが見当たらなかったため投稿させていただきました。関数が存在しないのであれば、具体的な簡単なサンプル等書いていただけるととてもありがたいです。 よろしくお願いします。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • プログラミングお願いします(JAVA)

    フィールドとして、「ナンバー」「ガソリン残量」「走行距離」「エンジンの排気量」の4つ、それらの値を表示するメソッド4つから構成されるCar2ラスを作成し、メインメソッドで2つのオブジェクトkcar と bcar を作成し、それぞれに、次の値を代入し、Car2ラスのメソッドを呼び出してそれぞれの値を表示するプログラムを作成しなさい オブジェクト名  ナンバー   ガソリン残量        走行距離   排気量 kcar        552        25.1            22000      2000 bcar        441        33.5           9940        2000 //↓一応自分が書いたコードなので会ってるか分かりませんが、違ってたら教えてください Car2 { int num; double gas; int m; int h; int num1; double gas1; int m1; int h1; void show() { System.out.println("kcar"+num+ +gas+m+h); System.out.println("bcar"+num1+ +gas1+m1+h1); } } class Sample1 { public static void main(String[] args) { Car2 car1; car1 =new Car2(); car1.num=552; car1.gas=25.1; car1.m=22000; car1.h=2000; car1.num1=441; car1.gas1=33.5; car1.m1=9940; car1.h1=2000; car1.show(); } }

専門家に質問してみよう