2014-09-24 3 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(); 
} 

Теперь я хочу объект «а» должен быть в состоянии получить доступ к mc1 и не MC2 Я хочу, чтобы объект «B» должен быть в состоянии получить доступ к mc2 и не МС1

Может ли кто-нибудь объяснить мне, как достичь вышеуказанных функциональных возможностей? Примечание. Класс A, B - это мои классы полезности, и его метод используется во многих местах моего проекта. Я хочу ограничить доступ моего разработчика к определенному методу.

С уважением, Sand

+0

вы могли бы C реализовать 2 интерфейса, один с каждый метод и определить, что A должен получить экземпляр одного интерфейса, а B другого. C будет претендовать на обоих. – njzk2

+0

Спасибо @ njzk2. Тем не менее, я понимаю ваше предложение. Можете ли вы разработать и предоставить код? – user3401717

+0

Почему это проголосовали? – user3401717

ответ

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(); 
    } 

} 

реализовать свой класс C с A1 и B1 интерфейсов -

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 к mc2 класса C и B от доступа к mc1 класса C? BTW благодарит заранее за всю помощь – user3401717

+0

@ user3401717: А знает только об A1, поэтому о mc1, а не о mc2. доступ к mc2 в экземпляре A1 даже не будет скомпилирован. – njzk2

+0

@Moni: Я бы рекомендовал использовать аннотацию '@ Override' для реализованных методов, чтобы помочь компилятору рассказать о возможных опечатках. – njzk2

Смежные вопросы