2014-09-24 146 views
-2

我正在尋找Java中問題的解決方案。希望團隊可以幫助我。Java抽象和接口

考慮以下類:

Class A{ 
//constructor 
Object obj; 

public A(Object obj){ 
this.obj = obj; 
} 

public void ma1(){ 
     system.out.println("In ma1"); 
     obj.mc1(); 
} 

public void ma2(){ 
     system.out.println("In ma2"); 
    //A should not be able to access mc2 
    obj.mc2(); 
} 

} 

Class B{ 

//constructor 
Object obj 
public B(Object obj){ 
this.obj = obj; 
} 

public void mb1(){ 
system.out.println("In mb1"); 
// B should not be able to access mc1 
obj.mc1(); 
} 

public void mb2(){ 
system.out.println("In mb2"); 
obj.mc2(); 
} 

} 

Class C{ 

public void mc1(){ 
system.out.println("In mc1"); 
} 

public void mc2(){ 
system.out.println("In mc2"); 
} 

} 

public static void main(String[] args){ 

A a = new A(new C); 
B b = new B(new C); 
a.ma1(); 
a.ma2(); 

b.mb1(); 
b.mb2(); 
} 

現在我想的對象「A」應該能夠訪問MC1和不MC2 我想對象「B」應該能夠訪問MC2,而不是MC1

任何人都可以解釋我如何實現上述功能? 注意:A類,B類是我的工具類,它的方法在我的項目的多個地方使用。我想限制我的開發人員訪問特定的方法。

問候, 沙

+0

你可以有ç實現2個接口,其中一個每個方法,並定義A應該接收一個接口的實例,而另一個接口B。 C將有資格獲得這兩項資格。 – njzk2 2014-09-24 20:54:40

+0

謝謝@ njzk2。不過,我瞭解你的建議。你能詳細說明並提供代碼嗎? – user3401717 2014-09-24 20:56:15

+0

爲什麼它被拒絕投票? – user3401717 2014-09-25 17:17:16

回答

0

試試這個代碼,如果它與你的要求相匹配。創建兩個接口 -

public interface A1 { 
    public void mc1(); 
} 

public interface B1 { 
    public void mc2(); 
} 

public class A { 
    //constructor 
    A1 obj; 

    public A(A1 obj){ 
    this.obj = obj; 
    } 

    public void ma1(){ 
      System.out.println("In ma1"); 
      obj.mc1(); 
    } 

    public void ma2(){ 
      System.out.println("In ma2"); 
     //A should not be able to access mc2 
     obj.mc2(); 
    } 


} 


public class B { 
    //constructor 
    B1 obj; 
    public B(B1 obj){ 
    this.obj = obj; 
    } 

    public void mb1(){ 
    System.out.println("In mb1"); 
    // B should not be able to access mc1 
    obj.mc1(); 
    } 

    public void mb2(){ 
    System.out.println("In mb2"); 
    obj.mc2(); 
    } 

} 

實現與A1和B1接口,你的C類 -

public class C implements A1,B1{ 
    public void mc1(){ 
     System.out.println("In mc1"); 
     } 

    public void mc2(){ 
     System.out.println("In mc2"); 
     } 
} 

這裏是你的主要方法 -

public static void main(String[] args){ 

     A1 a1 = new C(); 
     A a = new A(a1); 

     B1 b1 = new C(); 
     B b = new B(b1); 

      a.ma1(); 
     a.ma2(); 

     b.mb1(); 
     b.mb2(); 
} 
+0

這些限制A如何訪問C類和B類的mc2訪問C類的mc1? BTW在此先感謝所有幫助 – user3401717 2014-09-25 17:14:35

+0

@ user3401717:A只知道A1,因此關於mc1,而不是關於mc2。訪問A1實例上的mc2將不會編譯。 – njzk2 2014-09-25 18:33:54

+0

@Moni:我建議在實現的方法上使用'@ Override'註釋來幫助編譯器告訴您可能的拼寫錯誤。 – njzk2 2014-09-25 18:34:33