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

지금은 개체를 원하는 '는이'나는 MC2에 액세스 할 수 및 MC1 안 객체 'B'를 원하는 을 MC2 MC1에 액세스하지 할 수 있어야한다

누구나 위의 기능을 달성하는 방법을 설명 할 수 있습니까? 참고 : 클래스 A, B는 내 유틸리티 클래스이며 해당 메서드는 프로젝트의 여러 위치에서 사용됩니다. 개발자가 특정 메소드에 액세스하지 못하도록 제한하고 싶습니다. 이 귀하의 요구 사항과 일치하는 경우

감사합니다, 모래

+0

당신이 C 2 개 인터페이스 하나를 구현 할 수 각 메소드는 A가 하나의 인터페이스의 인스턴스를, B가 다른 인터페이스의 인스턴스를 수신하도록 정의합니다. C는 둘 다 자격이 있습니다. – njzk2

+0

감사합니다. @ njzk2. 그러나, 나는 당신의 제안을 이해할 수 없다. 당신은 정교하고 코드를 제공 할 수 있습니까? – user3401717

+0

투표가 다운 된 이유는 무엇입니까? – user3401717

답변

0

는이 코드를 사용해보십시오. 두 개의 인터페이스를 생성 -

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

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

여기 당신의 주요 방법입니다 - -

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 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의 mc2에 접근하고 클래스 B가 클래스 C의 mc1에 접근하는 것을 어떻게 제한할까요? BTW는 모든 도움을 미리 감사드립니다 – user3401717

+0

@ user3401717 : A는 A1에 대해서만 알고 있으므로 mc1에 대해서만 알고 mc2에 대해서는 알지 못합니다. A1 인스턴스에서 mc2에 액세스하면 컴파일되지 않습니다. – njzk2

+0

@Moni : 컴파일러가 오타에 대해 알려주도록 구현 된 메소드에'@ Override' 주석을 사용하는 것이 좋습니다. – njzk2

관련 문제