2016-04-01 10 views
0

抽象クラスを使用してJavaでコードを初めて作成していますが、問題があります。私はユーザのリスト(配列)を持っており、それぞれはuserClassのオブジェクトです。私は抽象クラス 'アカウント'とそれを拡張する2つのクラス 'basicAccount'と 'premiumAccount'を作成しました。入力に応じてすべてのユーザーの基本アカウントまたはプレミアムアカウントを作成したいと思います。あなたは私を助けてもらえJavaの抽象クラス - オブジェクトの作成

public class userClass { 
private String email; 
private String accountType; 
private account account; 

public userClass(String email, String accountType){ 
    this.setEmail(email); 
    this.setAccountType(accountType); 

    if(accountType.equals("Basic")){ 
     basicAccount account = new basicAccount(); 
    } 
    else if(accountType.equals("Premium")){ 
     premiumAccount account = new premiumAccount(); 
    } 
} 

を:?私の問題は、私はそれが文字列「accountType」例に応じて、基本またはプレミアムクラスのオブジェクトを作成しますので、userClassを実装する方法がわからないということですかuserClassメソッドにそれらのifを置くことはできますか?このような

+0

をあなたがする必要がどのような

accountフィールドがタイプbasicAccountであるかどうかをチェックしていますほとんど正しい。 'account'変数の前でアカウントクラス(premiumAccountとbasicAccount)を削除するだけです。関連するサブクラスとしてそれらを起動してください。 – Raptor

答えて

2

非常に重要な概念は多型です。多型は、別のタイプBのインスタンスであるかのようにAとBが

  • Bがクラスであるこれらのルールのいずれかに従うと、AのタイプがBのサブクラスである場合は、オブジェクトAを使用することができます
  • Bインタフェースであり、Aの型はBを実装しています

あなたの場合、最初のルールが適用されます。 basicAccountpremiumAccountの両方はaccountのサブクラスです。したがって、では、アカウントオブジェクトとしてプレミアムアカウントと基本アカウントオブジェクトを使用できます。新しく作成されたオブジェクトをaccountフィールドに割り当てます。

if(accountType.equals("Basic")){ 
    basicAccount account = new basicAccount(); 
    this.account = account; // This works! Don't worry! 
} 
else if(accountType.equals("Premium")){ 
    premiumAccount account = new premiumAccount(); 
    this.account = account; 
} 

副作用は、しかし、account sとbasicAccountpremiumAccountオブジェクトを使用した後、あなたが直接this.accountにアクセスしてbasicAccountpremiumAccountのメソッドにアクセスすることができないということです。

あなた本当には、この方法を試してみてください、そうしたい場合:

あなたはbasicAccountで定義されたdoStuff方法を持っていて、それを呼び出すようにしたいと言う:

this.account.doStuff(); 

ので、動作しないことthis.accountのタイプがaccountであり、accountのメソッドがdoStuffと定義されていません。 、if文で

if (this.account instanceof basicAccount) 

basicAccountthis.accountをキャストしてメソッドを呼び出します:あなたのコード実際に

((basicAccount)this.account).doStuff(); 
1

何かがおそらくそれを行うだろう:オブジェクト指向プログラミングにおける

public class UserClass{ 
    Account account; 

    public UserClass(String accountType){ 
     if(accountType.equals("Basic"){ 
       this.account = new basicAccount(); 
     } else { 
       this.account = new premiumAccount(); 
     { 
    } 
} 
関連する問題