• 締切済み

javaのabstractの意味

javaのabstractの意味 abstract class Factory { abstract ClassA createClassA(); } createClassA()メソッドは定義していません。 abstract ClassA createClassA();の意味はなんですか?

  • Java
  • 回答数3
  • ありがとう数5

みんなの回答

  • chaoruko
  • ベストアンサー率53% (7/13)
回答No.3

abstractクラスは誰かに継承してもらって始めて意味がでてきます 継承したほうのクラスは、abstractなクラスにかいてあるabstractなメソッドを実装しなければなりません 実装というのは ClassA createClassA(){ // いろいろ処理 return ClassAのインスタンス; } というふうに、中括弧の中身を書くことです

rescue99
質問者

お礼

ありがとうございます。 当方はJavaを勉強しています。 abstractなどjavaの基本文法は読破しております。 現在は、例外処理の仕方を勉強しています。 平行して、デザインパターンも勉強していました。 アブストラクトファクトリーパターンという23個中の2個目でつまずきました。 が、よくよく読むと、createClassA()メソッドが存在することがわかりました。 class Factory extend MyFactory { ClassA createClassA() { return new MyClass(); } } ご迷惑をお掛けしました。m__m

rescue99
質問者

補足

ClassAオブジェクトに、 createClassA()などの生成系を集めていたようです。 プログラムを追うのに失敗していました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

どういう回答を求めているのか迷うわね。 タイトル通りabstractの説明をすればいいのかしら。 abstractなクラスは日本語で抽象クラスというわ。 abstractなクラスの特徴は、abstractなメソッドを持つことよ。 abstractなクラスは将来必ずsubクラスを持つことが確定しているわ。 そしてそのsubクラスは必ずabstractなメソッドを実装する必要があるの。 あえて、工場と言うわ。 親クラスは「工場」という抽象的なクラス。 この工場は何かを生産する。 でも単に「工場」では何を作るかわからないから 「製品を生産する」というメソッドは実装することができないわ。 だから戻り値「製品」メソッド名「生産する」で 「工場」という抽象クラスを用意しておくの。 ここで「工場」というクラスを継承して「車の工場」というサブクラスを用意すると 「生産する」の内容は「車」を生産することになるわけ。 もちろん「車」は「製品」を継承してね。 こういう作り方をしておけば どんな工場でも同じメソッド名と同じ戻り値でアクセスできるから 将来拡張を行うとき、サブクラスを変更するだけで済んじゃうという とっても便利な考え方なのよ。 また、abstractなクラスは サブクラスを実装するための設計書 という見方もできるわ。 abstractなクラスのサブクラスは 必ずabstractなクラスのabstractなメソッドを実装しなさい というルールができあがるわ。 ちなみに、abstractなクラスを継承したクラスで abstractなメソッドを実装しなかった場合 そのクラスもabstractなクラスとする必要があるので注意よ。

rescue99
質問者

お礼

ありがとうございます。 当方はJavaを勉強しています。 abstractなどjavaの基本文法は読破しております。 現在は、例外処理の仕方を勉強しています。 平行して、デザインパターンも勉強していました。 アブストラクトファクトリーパターンという23個中の2個目でつまずきました。 が、よくよく読むと、createClassA()メソッドが存在することがわかりました。 class Factory extend MyFactory { ClassA createClassA() { return new MyClass(); } } ご迷惑をお掛けしました。m__m

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

抽象クラスFactoryには引数なしでClassAを返すcreateClassAメソッドが あるってことですね。 抽象クラスFactoryを継承するクラスには『引数なしでClassAを返すcreateClassAメソッド』を実装する必要があります。 ・・・むつかしい・・・

rescue99
質問者

お礼

ありがとうございます。 当方はJavaを勉強しています。 abstractなどjavaの基本文法は読破しております。 現在は、例外処理の仕方を勉強しています。 平行して、デザインパターンも勉強していました。 アブストラクトファクトリーパターンという23個中の2個目でつまずきました。 が、よくよく読むと、createClassA()メソッドが存在することがわかりました。 class Factory extend MyFactory { ClassA createClassA() { return new MyClass(); } } ご迷惑をお掛けしました。m__m

rescue99
質問者

補足

abstract ClassA createClassA();で、 createClassA()メソッドが実装されるのかと思いました。

関連するQ&A

  • Javaのabstractについて

    Javaのabstractメソッドは、確か中身がないメソッドということで、オーバーライドしないと呼び出すことができないんではなかったでしょうか・・。 それなのに、javax.xml.DocumentBuilderFactoryクラスのnewDocumentBuilderメソッドって、abstract宣言でも呼び出したらちゃんとDocumentBuilderが返るみたいなんですけど、これ如何に。

    • ベストアンサー
    • XML
  • abstractなClassについて

    (1)abstractなClassはabstractなmethodを持っていてもnewすることができる。 (2)(1)のabstractなClassを継承したClassは、(1)のabstractなmethodを実装しないとnewすることができない。 この認識は正しいでしょうか?

    • 締切済み
    • PHP
  • アブストラクトとインターフェースの簡単な一例文

    JAVAについて質問よろしくお願いします。 abstract抽象クラスとインターフェースについて下記理解なのですが、超かんたんな一例など欲しいのですが何かないでしょうか。たとえば package round1.chapter1; public class Helloworld { public static void main(String[] args) { System.out.println("こんにちは!"); } } というような一文です。 ~私の理解~ アブストラクトとは、違ったクラス内で同一メソッドがある場合は親クラスに置き、違ったメソッドがある場合は抽象クラスとして親クラスに置いて、実装はサブクラスに任せるという形式で使われる言葉 インターフェースとは、機能だけを仕様書として書いておき、定義されたとおりのメソッドを実装しないといけないという呼び出し方の統一を図る際に使われるメソッド置き場 ~~~~~ このふたつについてものすごく簡単な使用例を頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • abstract と static を一緒に付けることはある?

    抽象クラスの抽象メソッドにstaticを付ける(abstract と static をメソッドに一緒に付ける)ことはありますか? 例えば、 abstract class Super {  static abstract void meth(); } class Sub extends Super {  static void meth() {   System.out.print("hello");  } } として、mainの中に  Sub.meth(); を書いてみたのですが、普通にコンパイルは通りhelloが出力されます。 staticの意味を考えると、こういうことをするのは意味がないと思うのですが、独学なので身近に聞ける人もいません。 御教授よろしくお願いします。

  • Abstract Factoryパターンについて

    JAVAの勉強をしはじめたのはいいのですが、 Abstract Factoryパターンについて 「これを使うことによってどのようなメリットやデメリットがあるか。」 「また、どのような状況において適用されるのか。」 という点が分かりません。 関連するパターンが多いようなのでなるべくしっかりと理解しておきたいのです。 コレについて詳しい説明をお願いします。

  • JAVA コンパイル時のエラー

    JAVAの初心者です。 javacでコンパイルする際, gui は abstract でなく、java.awt.event.KeyListener 内の abstract メソッド keyReleased(java.awt.event.KeyEvent) をオーバーライドしません。 public class gui extends JFrame implements ActionListener,KeyListener { このようなエラー文がでます。 このエラー文の意味を教えていただけないでしょうか。 よろしくお願いします。

  • abstractメソッドの使い方

     漠然とした質問になりますが、よろしくお願いします。 今、前の人が記述したソースを読んでおりまして、 抽象クラスのメソッドの使い方で疑問が生じました。 lookメソッドに注目して頂きたいのですが、 public abstract class Editor { protected abstract boolean look() throws Exception; ・・・・・・・・・・・・ if(! this.look()) {   // ★ return false; } という記述があります。Editor クラスにはこの2つ以外のlookメソッドはありません。 そのためlook()では他のクラスで実装した戻り値が返ってくるはずですが、 thisを監視してデバックすると★の行上に処理のラインが来たとき、 thisにlookメソッドを含まないクラス名が表示されます。 thisがEditor でない事自体よく分かりません・・ abstractはあまり使ったことが無く、どこで実装されているのか(正確には、実装されているクラスのうちここで使われているのはどのクラスのlookメソッドか)を知りたいです。 知っている限りの方法では特定できませんでした。 よろしければアドバイスをお願いします。

    • ベストアンサー
    • Java
  • eclipseでabstractクラスをデバックするには

    いつもお世話になっております。 java1.6 eclipse3.3 にてabstractクラスのメソッドを呼び出している手前でブレークポイントを設定し、ステップインしてデバックしていくと、 abstractクラスの方のソースがデバックされます。 abstractクラスを継承している実際に流れているソースをデバックする事はできますでしょうか。 今はソースを追う時、abstractメソッドがきた場合、 そのメソッド名でプロジェクト全体を検索して、どのソースが実行されているのかチェックしていますが、たくさんのソースから継承されている場合、現在流れている処理が、どのソースのロジックかを特定するのが大変です。 簡単に特定する事はできますでしょうか。 よろしくお願いします。

  • javaで、オブジェクトを生成しないとメソッドは使えないんですか?

    javaで、オブジェクトを生成しないとメソッドは使えないんですか? そのように習ったのですが、サブクラスのメソッド定義の中で、オブジェクトを生成せずにスーパークラスのメソッドを使える例(下に簡単に書きました)をみて、分からなくなってしまいました。 おしえてください、よろしくおねがいします。 ------------------------------- class superclass { method_a(){ ~~~~ } } --------------------------- class subclass { method_b(){ super.method_a(); }

    • ベストアンサー
    • Java
  • templateメソッドパターンで抽象メソッドを定義する意義

    こんにちは。 テンプレートメソッドパターンで、例えば、 class oge { abstract function a(); abstract function b($param); final function tempMethod() { $this->a(); $this->b($param); } } とした場合、抽象メソッドの定義は意味があるのでしょうか? なぜなら、tempMethod()中でa()もb($param)も呼び出してますんで、 わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。 抽象メソッドの定義の意義を教えてください。

    • 締切済み
    • PHP

専門家に質問してみよう