• 締切済み

困っています

mocajabaの回答

  • mocajaba
  • ベストアンサー率20% (1/5)
回答No.3

>抽象クラスAとそれを継承するクラスB,C,Dがありまして、それにクラスをさらに三つ追加して この追加した三つのクラスというのは、クラスB,C,Dの内部クラスってことでしょうか? つまり インターフェイスAを実装したクラスBの内部クラスEでもAを実装したい こういう認識でいいんでしょうか? そうであるという前提ですが、どうしても内部クラスじゃないとだめなんでしょうか? 分けてやれば、普通にimplements A で済むんですが。 勘違いしてましたら、済みません。

関連するQ&A

  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java
  • インターフェース

    インターフェースについて学ぼうと思っているのですが、 どうもいまいち何がなんだかわからなくなっています。 インターフェースはクラスによって実装され、 実装クラスはインターフェースで宣言されている 抽象メソッドを実行する とあるのですが、実装とは何ですか? 抽象メソッドとは何ですか?

    • ベストアンサー
    • Java
  • 継承したメソッドのドキュメンテーションコメント

    C#の開発を始めて日が浅いため、現場におけるお作法がわかりません。 現場におけるクラス・インターフェースを継承したメソッドのドキュメンテーションコメントの付け方に関する一般論についてお教えいただきたいです。 ※基底クラス、及びインターフェースの抽象メソッドにはドキュメンテーションコメントの記述がある物とします。 ※普段はJavaを使っている為、そこから引用している書いている部分があります。ご容赦下さい。 ・抽象クラスにおけるインターフェースから継承した抽象メソッド(実装しない場合) Javaとは違い、抽象クラスであってもインターフェースが持つの抽象メソッドを無視する事はできず、 public abstract修飾子を付けて抽象メソッドを定義してやる必要があるようなのですが、 この場合、ドキュメンテーションコメントは省略すべきでしょうか? それとも、何かしら記述するべきなのでしょうか?(Javaで言うところの@inheritDoc等・・・そのような物があるかはわかりませんが) ・新たに実装を行う場合(抽象メソッドの実装等) 省略すべきでしょうか? ・既存の実装を拡張し、変更の影響は微小かつメソッド内のみで完結し、概要やその他のメソッドの責任において表記すべき内容に変化が無い場合 省略すべきでしょうか? ・既存の実装を拡張し、想定される例外の追加等、メソッド外にも影響を及ぼす大きな変更が入った場合 新たに完全なドキュメンテーションコメントを作成するべきでしょうか? それとも差分以外は新たに作成すべきではないのでしょうか? 一般論と言っても規模や進め方によって様々だとは思いますが、 通念的に「心がけていくべき事」等あれば、是非お教え下さい。 最後に、この質問の趣旨からは外れるのですが、一つ追加で別の質問をさせてください。 私は何故抽象クラスがインターフェースの抽象メソッドを無視できないかがわかっておりません。 (インターフェース-インターフェース、抽象クラス-抽象クラスは無視できるのに) 敢えて明示的に定義を強要させている以上、何か理由あっての事だと思いますが、 それがわからず悶々村々としながら作業しております。 その理由をお教えいただけませんでしょうか。 宜しくお願い致します。

  • 抽象クラスが継承されているかどうか検証したい

    Class.forName()にて取得したクラスが、特定の抽象クラスを継承しているかどうかを 検証したいです。 Class.getInterfaces()にて、実装されているインターフェースを取得することが出来ましたが、 Class.getClasses()、Class.getDeclareClasses()のいずれでも、継承されている 抽象クラスを取得することが出来ません。 そもそも抽象クラスはインスタンス化できないからなのかもしれませんが、 ならば、その抽象クラス名称を取得したいです。 方法はありますでしょうか? 無理ならばインターフェースの実装にし、基盤部で動作のカバーを する作りで考え直すつもりです。

    • ベストアンサー
    • Java
  • 継承、実装についてまとめています。この図は正しいですか?

    継承、実装についてまとめています。この図は正しいですか? クラス1 から継承した クラス2のものを、クラス3で継承するのでしょうか? クラス1 │ int a; │ static int b; │ │ クラス1() { } │ │ int methodA () { } │ static int methodB() { } ↓ サブクラス1 extends クラス1 │ int a; // 継承 │ int c; │ static int d; │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ int methodA () { } // 継承 │ int methodC() { } │ static int methodD() { } ↓ サブクラス2 extends サブクラス1 implements サブインタフェース1, サブインタフェース2… ↑ int a; // サブクラス1のフィールドを継承 │ int c; // 継承 │ int e; │ static int f; │ public static final int g; // 実装(サブインタフェース1) │ public static final int h; // 実装 │ │ サブクラス2() { } │ │ int methodA () { } // サブクラス1のメソッドを継承 │ int methodC() { } // 継承 │ int methodE() { } │ static int methodF() { } │ int methodG() { } // 実装(サブインタフェース1) │ int methodH() { } // 実装 │ interface サブインタフェース1 extends スーパインタフェース1... ↑ public static final int h; │ │ public abstract int methodE() { } // 継承 │ public abstract int methodH() { } │ interface スーパーインタフェース public static final int g; public abstract int methodG() { }

    • ベストアンサー
    • Java
  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。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
  • JAVA:抽象クラスとインタフェースクラスの違い

    インタフェースクラスの存在意義がわかりません。 「処理の実体まで実装せず、箱だけ作っておく」という意味では、抽象クラスで良いのでは?と感じます。 (厳密には、インタフェースクラスの方は、継承せずに、複数の実装パターンを分けれるという部分に違いはあると思いますが、ほぼ存在意義がないように感じます。)

    • ベストアンサー
    • Java
  • 【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などと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?

  • 抽象クラスとインターフェースの使い分け

    抽象クラスとインターフェース、この2つの違い、使い分け方が未だにはっきりとはわかりません・・・ 抽象クラスもインターフェースも実装は持たず、抽象クラスはサブクラスで、インターフェースはそれをインプリメントしたクラスで実装を行うのですよね? 両者ともに言わば中身はなく外枠だけ定義されていると言えると思うのですが、だとしたらこの2つの違いや使い分けってどうなるのでしょうか。 抽象クラスでは部分的な実装を含められることや、インターフェースでは実装クラスが全てのメソッドを実装しなければいけない、複数実装できるといった使い方の違いしかないのでしょうか。 だとしたら実際に抽象クラスとして用意するのかインターフェースとして用意するのかの選択基準はなんなのでしょうか。 明確にこういう場合は抽象クラス、こういう場合はインターフェースなどと言った使い分けってあるのでしょうか。

  • c# この高速化の方法あり?

     こんにちは、c#初心者です。  今回は初期化の高速化の方法で悩んでいるので質問させていただきました。  ライブラリ内でstrring型と同じくらい頻繁に初期化が行われる使い方をされるクラスAを作り、そこからクラスBへ、クラスBからクラスCへ…クラスEといった感じで継承させています。  ところが、どのクラスもクラスAと同じように頻繁に新しいインスタンスが初期化されるのでコンストラクタの処理時間が一部のパフォーマンスに結構ひびくのですが、継承しているために、クラスCを初期化するだけで、クラスAとクラスBのコンストラクタが呼び出されてしまい、このことが特にクラスEではきついのです。  確かに呼び出しに取られる時間は少ないとはいえ、もともとコンストラクタでの作業は少ないので、割合としてはそこそこな時間を取っている状態になっています。  そこで思いついたのが、インターフェイスを利用して継承を使わないという方法です。  それぞれ、IA, IB, …, IEで対応するインターフェイスを実装。例えばクラスBはIA, IBの二つ、クラスEはIA~IE全てのインターフェイスを実装している状態です。  他に思いついたのは、上記の方法+クラスB以降を全てクラスAから派生させるという方法です。速度は満点ではありませんが、これならある程度抽象化もできて、余分なコンストラクタ呼び出しも1回で済みます。  ちなみにこれは現在製作中のライブラリ内で使われているクラスです。末端のアプリケーションなら問題ないような気がするのですが、何しろライブラリなのでこんな手法は如何かと思い質問させていただきました。  自分が見る限りではコンストラクタ内に他に余分なコードはありませんし、無論ループはありませんが、他に高速化する方法があればそれも教えていただきたいです。  とりあえず、言語の性能を最大限に引き出すことでの高速化をコンセプトにしているので多言語への乗り換えは無しということでお願いします。