- ベストアンサー
C# インターフェイスの実装でエラーが発生しています
- C# インターフェイスの実装でエラーが発生しています。該当のインターフェイスメンバを正しく実装していないため、エラーが表示されます。
- 具体的には、SeatConditionクラスでICondtionインターフェイスを実装していますが、「'(略).SeatCondition' はインターフェイスメンバ '(略)ICondtion.Judge(略)を実装しません。」というエラーメッセージが表示されています。
- これは、SeatConditionクラスがICondtionインターフェイスで定義されているメソッドを正しく実装していないことを意味しています。正しい実装を行うことでエラーを解消することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
関連するQ&A
- singletonによるインターフェイスの実装
Java勉強中の初心者です。 標題の件についてお願いします。 以下、簡単に条件を説明させていただきます。 Aクラス = メインクラス Bクラス = インターフェイスクラス Cクラス = DとEを動的に生成するクラス Dクラス = インターフェイスを実装するクラス Eクラス = インターフェイスを実装するクラス AクラスにB.getInstance(name)があります。 for文の無限ループがあります。 Cクラス class C { public static B getInstance(String name) { // Aクラスのaと変数nameが比較して一致したら // Dクラスのインスタンス生成 // 一致しなかったらEクラスのインスタンス生成 if(A.a.equals(name)){ return D.getInstance(); }else{ return E.getInstance(); } } } Dクラス class D implements B{ private D() { } public static D getInstance() { D d = new D(); return d; } // インターフェイスでのメソッド省略します。 } Eクラス class E implements B{ private E() { } public static E getInstance() { E e = new E(); return e; } // インターフェイスでのメソッド省略します。 } この条件の時にnewするたびにインスタンスが 生成されてしまいます。 インスタンスの生成が一度だけしか 生成されないようにするには、C,D,Eクラスで どのように記述すればいいか悩んでいます。 (骨組みは書けましたが) クラスを簡単に省略してわかりづらいと 思いますがよろしくお願いします。
- ベストアンサー
- Java
- インターフェイス実装クラスの表示について
/* インタフェースPlanetを実装したクラスEarth、Marsがあります。 以下の実行結果になるようにクラスAggregateへshowメソッドを 追加してください。 [実行結果] 地球 太陽系にある惑星の1つで、太陽から3番目に近い。・・・ 火星 太陽系の太陽に近い方から4番目の惑星である。・・・ */ // [Planet.java] // 実装したいPlanetクラス interface Planet { public String getName(); public String getOutline(); } // Planetを実装したEarthクラス // [Earth.java] class Earth implements Planet { private final String name="地球"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系にある惑星の1つで、太陽から3番目に近い。・・・"; } } // Planetを実装したMarsクラス // [Mars.java] class Mars implements Planet { private final String name="火星"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系の太陽に近い方から4番目の惑星である。・・・"; } } // メインクラス // [Main.java] class Main{ public static void main(String[] args){ // Earth&Marsクラスのインスタンス化 Earth earth = new Earth(); Mars mars = new Mars(); // Aggregateクラスのインスタンス化 Aggregate aggregation = new Aggregate(); // showメソッド呼び出し:戻り値無し、引数earth・mars aggregation.show(earth); aggregation.show(mars); } } // [Aggregate.java] class Aggregate { // ここにshowメソッドを追加 public void show(Earth planet){ System.out.println(); } public void show(Mars planet){ System.out.println(); } } showメソッドに引数としてEarth planet,Mars planetを渡すというところまでは理解しています。後は星の名前と概要を表示するのですが、例えば、 showメソッド内 // ここにshowメソッドを追加 public void show(Earth planet){ String str = earth.getName(); System.out.println(str); } public void show(Mars planet){ String str2 = mars.getOutline(); System.out.println(str2); } } とすると、erathとmarsの部分が「シンボルがありません」のエラーになります。自分の認識としては、EarthクラスとMarsクラスでフィールド変数を宣言しているので使えるのでは?と思っていたのですが、全然違うようです。どなたかどちらかのコード例を表記して頂けないでしょうか?よろしくお願い致します。
- ベストアンサー
- Java
- ParseとTryParseを実装するなら
こんにちは。c#初心者です。 c++にも、c#にもintにParseメソッドと、TryParseメソッドがあると思いますが、intのように比較的簡単に解析できるもの(比較的簡単なメソッド)ならParseメソッドをコピペして、例外の部分を「return false;」に変えるだけで十分だと思うのですが、問題は、Color構造体のような(やや)複雑なものです。 R, G, Bに加え、α値があり、また、名前で色を表す可能性もあります。考えただけで(intと比べると)かなり面倒なメソッドになることが分かると思うのですが、とりあえずParseメソッドを実装したとしましょう。 次にどうせならTryParseメソッドも実装したいところなのですが、初心者が考えた方法は3つあります。 1、Parseメソッドをコピペして(FormatExceptionなどの)例外部分を「return false;」に変える。 2、Parseメソッドをtryブロックに入れて、catchブロックで「return false;」とする。 3、privateなtryParseメソッドを用意し、それをベースにする。戻り値はException型で、Parseメソッドではnullで無ければスロー、TryParseメソッドでは「return exception == null;」とする。 (ソースコードは一番下) 1は保守性上、少々問題ありかと。2は利用側がちょっと楽になることには変わりないが、パフォーマンス重視には向かない(というかテキストを解析している時点でパフォーマンス低いかな?)、3は1、2の問題を克服しているもののこのような設計でよいのか自信なし。 という訳で悩んでいます。どれが一番良いでしょうか? もっと良い案があればそれでも良いです。どなたかわかる方がいらしゃいましたら教えてください。 ----------- 簡易ソースコード -------------- c#で書いています。また読みやすく(なっているかどうかは分かりませんが)するため、1行で書けるところも2行以上で書いている部分もあります。 案1 public static Color Parse(string text) { …… if ( invalid ) throw new FormatException(); …… } public static bool TryParse(string text, out Color result) { …… if ( invalid ) { result = Color.Empty; return false; } …… } ------------------------------------------------ 案2 public static Color Parse(string text); // 略 public static bool TryParse(string text, out Color result) { try { result = Parse(text); return true; } catch ( FormatException ) { result = Color.Empty; return false; } } --------------------------------------------------- 案3 private static Exception tryParse(string text, out Color result) { …… if ( invalid ) { result = Color.Empty; return new FormatException(); // スローせずに返す } …… } public static Color Parse(string text) { Color result; Exception exception = tryParse(text, out result); if ( exception != null ) throw exception; else return result; } public static Color TryParse(string text, out Color result) { Exception exception = tryParse(text, out result); if ( exception == null ) return true; // 例外が無ければ成功 else return false; }
- ベストアンサー
- C・C++・C#
- インターフェイスを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
- C# こういう場合ってどうなるの?
public void A(bool b) { if(b ? B() : C())//分かると思いますが、三項演算子 { //略 } } public bool B() { return true; } public bool C() { return false } 上記のAにtrueを渡し実行した場合、 if文の中はどうなるのでしょうか? 引数がtrueならBを実行し、Bの戻り値trueが if文で処理され、if内に入る・・・でよろしいのでしょうか? それとも引数bの評価がそのままifで使われるのでしょうか? 例えばのコードなので、bだろうがBだろうが変わらない・・・みたいな 回答はご遠慮ください。
- 締切済み
- C・C++・C#
- 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」
「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{ void show(); } class A{ public void show(){ System.out.println("A"); } } class B extends A implements X{ } public class Main{ public static void main(String[] args){ X x=new B(); x.show(); } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16
- ベストアンサー
- Java
- C# コードの意味を教えてください
C#の勉強をはじめたところです。 以下のコードの ”ここが不明” とかいてあるところの意味を教えてください。 x => x.FilePath == pathこの意味が特に分かりません。 /////////////////////////// bool DoesNeedBackup(List<FileAndTime> fileAndTimes, string[] folderPaths, string[] filePaths) { if(fileAndTimes.Count != folderPaths.Length + filePaths.Length) return true; bool doesNeed = false; foreach(string path in filePaths) { FileAndTime fileAndTime = fileAndTimes.FirstOrDefault(x => x.FilePath == path);←ここが不明 ・ ・ ・ } クラスの定義 public class FileAndTime { public FileAndTime(string path, long tick) { FilePath = path; Tick = tick; } public long Tick { get; protected set; } = 0; public string FilePath { get; protected set; } = ""; public bool IsChecked { get; set; } = false; }
- ベストアンサー
- C・C++・C#
- オブジェクト指向で、インターフェースにないメソッドを呼ぶ
こんにちは。質問させてください。 現在C++でプログラムを書いているのですが、以下のようなプログラムを書いたとします(これ例ですので、実際のプログラムとは異なります)。 // ポインターを抽象化 class PointerInterface { }; // 抽象化したクラスを継承して整数型のポインタを作る class IntPointer : public PointerInterface { private: // int型のポインタ int *p; public: int* get() { return p; } }; // 抽象化したクラスを継承して少数型のポインタを作る class FloatPointer : public PointerInterface { private: float *p; public: float* get() { return p; } }; PointerInterface* CreateInterface( bool flag ) { PointerInterface* result = 0; if( flag ) { result = new IntPointer; } else { result = new FloatPointer; } return result; } void setIntPointer( PointerInterface* ptr ) { // ここでint型のポインターを取り出して操作したい } void main() { PointerInterface* ptr = CreateInterface( true ); setPointer( ptr ); } インターフェースは同じなのに継承先に内含されている変数のタイプが違い、それを取得したい場合が出てくると思います。 こういう場合どのように実装すれば、より美しくコーディングすることができるでしょうか? /* 私は 1:PointerInterfaceにvoid*を戻すメソッドを宣言する 2:setIntPointerの中で無理やりキャストして子クラスのgetを無理やり呼び出す という2つの方法が思いついたのですが、なんだかどっちのコーディングもピンときません。 お知恵を貸してください! ※今回はtemplateを使うというのは、なしでお願いします。 */
- ベストアンサー
- C・C++・C#
- javaプログラムについて
mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。
- 締切済み
- SE・インフラ・Webエンジニア
- 【C#】内部だけで有効なインターフェースを作りたい
C#2005でコンポーネントを作ろうと思っています。 そこであらゆるコンポーネントに共通な内部インターフェースが存在し、 更にはコンポーネントはいくつかの種類のコンポーネントを継承したいです。 不可能なコードで記すと、このようなことがしたいです。 【拡張TextBox】 public class ExTextBox : AbstractTextBox { } 【抽象TextBox】 public abstract class AbstractTextBox : TextBox, ICommonControl { public AbstractTextBox() { _ifMethod(); } private void _ifMethod() { ←これ // 処理 } } 【内部インターフェース】 public interface ICommonControl { void _ifMethod(); } インターフェースはpublic宣言以外定義が行えず、内部で利用される インターフェースとしては使えません。 別にインターフェースをそのまま実装すれば出来なくはないですが、 外部にインターフェースを実装したメソッドが見えるのはマズいです。 もしくは多重継承的なことが出来れば解決すると思うのですが・・・。 コンポーネントを継承する関係で、直前のクラスはTextBoxやLabelなどと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?
- ベストアンサー
- C・C++・C#
お礼
ご教示ありがとうございます。 ソリューションのクリーンとビルドを繰り返したらエラーがでなくなりました。 原因不明で怖いですが、とりあえず動くようになりました。