Java抽象和接口

时间:2014-09-24 20:50:21

标签: java design-patterns interface abstraction

我正在寻找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类是我的实用程序类,它的方法在我的项目中的多个地方使用。我想限制我的开发人员访问特定方法。

此致 砂

1 个答案:

答案 0 :(得分: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();
}