2014-09-24 106 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