2016-04-17 5 views
0

は別のクラスで開催されたスタックを修正するために、具体的方法を、/ setメソッドを取得します....変更スタック

クラスAには、以下のインスタンス変数を持っています

public class ClassA { 
    private Stack<String> stack; 
    public ClassA { 
     stack = new Stack<String>(); 
    } 
} 

型クラスAのオブジェクトがクラスBにおけるインスタンス変数である:

public class Class B { 
    private ClassA classa; 
    public Class B(ClassA classa) { 
     this.classa = classa; 
    } 
} 

クラスBは、(POP)と(プッシュする必要がある)クラスAにおけるスタッククラスAのようなgetメソッドを実装する必要がありませんso:

public Stack<String> getStack() { 
    return stack; 
} 

、その後、スタックBには、以下の方法があります。

public void Pop(){ 
    try { 
     String a = classa.getStack().pop(); 
    } 
    catch (EmptyStackException e) { 
    } 
} 

あるいは、ClassAクラスが設定されたメソッドを実装する必要がありませんの?例えば

クラスBに以下に結果の
public void popStack() { 
    stack.pop();  
} 

.....

スタック変数が返された場合は修正した場合、私は知らない
public void Pop(){ 
    try { 
     String a = classa.popStack(); 
    } 
    catch (EmptyStackException e) { 
    } 
} 

それは、クラスAが保持している元を変更、または

+0

通知は、その ''パブリック文字列popStack() 'の代わりを行う... AにおけるStackオブジェクトをさらすより良いデザインですpublic void popStack() ' – Dimi

+0

ああ、それは実際に自分のコードで持っていたものです。 – javapalava

答えて

0

クラスAは、スタックからメソッドpushpopを提供する必要があります。 getメソッドでスタック全体を返すことはあまり良くありません。原則として、ユーザーが必要としないものは返さない。

カプセル化について学ぶ必要があります。これはオブジェクト指向プログラミングの非常に重要な概念であり、高品質のアプリケーションを知らずに設計することはできません。

+0

OK素晴らしい、ありがとうNico – javapalava

+0

@javapalavaは有用であれば答えを受け入れることを躊躇しないでください。また、カプセル化についても読んでください。 – Nico

0

このシナリオでは、スタックがクラスAに保持されているため、スタックをクラスBに直接渡すのは良い方法ではありません。でメソッドを実装できます。popスタックスタックにはpushがあります。これはJAVA カプセルを出品している例です。

常に、基本となる実装をできるだけ隠しておいてください。

0

なぜAはStackインターフェイスと同じメソッドを実装し、スタックメンバーに渡すだけですか?

public String pop() 
    { 
     return stack.pop(); 
    } 
public String push(String item) 
    { 
     return stack.push(item); 
    } 

は、それはあなたがpopStack() ``に文字列を返す必要が

関連する問題