2

String をサブクラスのデータ型に変換したいのですが、どうすればできますか? またはそれは可能ですか?

私は抽象クラスAcctを持っています

パブリック抽象クラス SinAcct は Acct を拡張します

パブリック クラス SavAcct は SinAcct を拡張します

SavAcct には、コンストラクターがあります。

public SavAcct(String acctNo, String name, ConsolidateAccount ownerAcct, double lastMonthBal){
        super(acctNo,name,ownerAcct,lastMonthBal);

    }

抽象クラス ConsolidateAccount は Account を拡張します

SavAcct を新規作成したいのですが、

new SavAcct(array[1],array[2],array[3],Double.parseDouble(array[4])

しかし、それはエラーです コンストラクタ SavAcct(String, String, String, double) は未定義です

誰でも私を助けることができますか?お願いします

4

7 に答える 7

3

具象クラス(非抽象クラス)を拡張する必要がありConsolidateAccountます。

public class ConcreteAccount extends ConsolidateAccount

次に、このようなものを使用できます。

ConsolidateAccount ownerAcct = new ConcreteAccount(array[3]);
new SavAcct(array[1],array[2],ownerAcct,Double.parseDouble(array[4]);

public ConcreteAccount(String str)ConcreteAccount クラスにコンストラクターを作成します。

于 2012-04-25T11:06:31.767 に答える
3

間違った道を進んでいないことを確認するために、この既存のコンストラクターのように本質的に呼び出す必要がある新しいコンストラクターを追加する代わりに、別の方法で、キーsuper(acctNo,name,ownerAcct,lastMonthBal);を使用して ConsolidateAccount インスタンスを作成または検索してみませんか?array[3]

例えば

ConsolidateAccount consolidateAccount = new ConcreteConsolidateAccount(array[3]);
new SavAcct(array[1],array[2],consolidateAccount,Double.parseDouble(array[4]);

ConcreteConsolidateAccountを拡張する具体的なクラスはどこにありますかConsolidateAccount

より賢明なことのように見えます。

もちろん、 の周りConsolidateAccountのロジックについてはわかりませんし、 を受け取るコンストラクターがあるかどうかもわかりませんStringが、SavAcct が拡張しているクラスのコンストラクターを呼び出す必要があるように見えるので、これはアイデアを提供するためのものです。 (これは、スーパー コールによって示されます)。

于 2012-04-25T11:08:36.880 に答える
3

本当に String を他のクラスのオブジェクトに変換したい場合。3つの可能な解決策があります:-

  1. String を引数として取り、適切な変換を行ってオブジェクトを作成するコンストラクタを作成します。

  2. String パラメータを取り、オブジェクトを返すファクトリ メソッド、つまり getInstance() を用意します。

  3. 上記と同じ目的で使用できるメソッドを持つことができます。

編集

String は、アプリケーションで変更または継承できない最終クラスであることを忘れていました。

public Static SubClass getInstance(String str){
   SubClass obj = new SubClass(); 
   // ***the choice of constructor depends upon how u have created ur class
   //use str to form the SubClass object in following lines 
   return obj;
}

あなたがそれを使用できるよりも

SubClass newObj = SubClass.getInstance("String value here");
于 2012-04-25T10:51:07.397 に答える
3

String クラスは final であるため、それはできません。継承ではなく合成できますか?http://www.artima.com/designtechniques/compoinh.html

于 2012-04-25T11:14:35.647 に答える
2

不可能です。String は final です。

于 2012-04-25T10:48:24.120 に答える
0

文字列の配列があり、呼び出しているコンストラクターConsolidateAccountは 3 番目の位置に必要です。ConsolidateAccountその 3 番目の に基づいてのサブタイプをインスタンス化する必要がありますString。それを行う方法を支援する詳細はありません。また、1 から始まる配列にインデックスを付けています。配列は 0 から始まります。

于 2012-04-25T11:06:52.350 に答える
0

java.lang.Stringクラスはですので、finalそれを拡張する方法はありません。あなたはせいぜいそれを包むことができます。

Java の String クラスに新しいメソッドを追加できますか? を参照してください。

于 2012-04-25T10:49:05.640 に答える