2017-11-01 6 views
0

에 생성자와 같은 인터페이스에 전달하면 내 코드입니다 :클래스 다음

public interface Baseinterface {} 
abstract class Interface1 implements Baseinterface{} 
abstract class Interface2 implements Baseinterface{} 

public interface Classinterface {} 

그리고 난이 코드를 사용하려면 :

public class Myclass(Baseinterface interfaceversion) implements Classinterface{} 

인터페이스 구현의 종류 생성자로 전달됩니다 . 그래서 두 추상 클래스 모두에서 함수가 정의되면 실제 클래스는 사용할 추상 클래스를 알고 있습니다. 나는 자바에서 상당히 새로운 사람이다. 감사합니다. .

+0

당신이 다중 상속의 양식을 만들고있는 것처럼 들리 겠지만, 나는 대부분 자바에 동의 할 것이라고 생각합니다. 클래스가 인스턴스별로 인스턴스별로 다른 구현을 선택할 수있게하려면 상속 기반 솔루션을 추천하고 대신 MyClass 인스턴스에 사용할 인터페이스 구현의 인스턴스 필드를 포함시켜야합니다. 이것은 여전히 ​​생성자로 전달 될 수 있습니다. –

+0

그리고 어떻게해야합니까? :) –

+0

"조금 혼란 스럽네요"란 무슨 뜻입니까? 게시 한 코드의 문제점은 무엇입니까? 너 이해 하지마? –

답변

1

나는 문제의 본질을 오해하지만, 여기에 간다 될 수있다

interface BaseInterface { 
    void foo(); 
} 

abstract class ITestA implements BaseInterface { 
    public void foo() { 
     System.out.print("A"); 
    } 
} 

abstract class ITestB implements BaseInterface { 
    public void foo() { 
     System.out.print("B"); 
    } 
} 

public class MyClass { 
    private BaseInterface enclosed; 

    MyClass(BaseInterface base) { 
     enclosed = base; 
    } 

    public void foo() { 
     enclosed.foo(); // call the implementation specific to the instance passed in by constructor 
    } 
} 

이 수 : 인터페이스에 의해 정의 된 같은 방법을 구현하는 두 개의 추상 클래스를 설명하는이 코드를 감안할 때

public class Test { 
    void bar() { 
     // This may look weird cause we're defining an anonymous implementation of the abstract class, without adding any new implementation details 
     ITestA impl = new ITestA() {}; 

     MyClass myClass = new MyClass(impl); 
     myClass.foo(); // prints "A" 
    } 
} 
+0

이것입니다 :) 대단히 감사합니다. –