2012-05-04 4 views
-1

인터페이스를 사용해야하는 이유는 무엇입니까?추상 클래스와 인터페이스를 언제 사용합니까?

하나의 인터페이스를 구현할 때 해당 인터페이스의 메소드 정의를 작성해야합니다. 그래서 인터페이스를 구현해야합니까? 클래스에 직접 메소드를 작성할 수 있습니다.

감사합니다 :) 당신이 classes.If 정의의 N 번호로 하나의 방법을 사용했다

+0

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html 및 http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html –

+0

더 명확한 질문. "어디서"란 뜻이야?추상적 클래스를 사용하는시기와 인터페이스를 사용하는시기를 의미합니까? – Garbage

+0

가능한 복제본 [실용적인 예제에서 사용 추상 클래스와 인터페이스를 이해할 수 있습니까?] (http://stackoverflow.com/questions/627199/can-you-help-me-understand-in-a-practical -example-the-usage-abstract-classes-vs) –

답변

0

은 각 클래스의 사용 인터페이스는 다릅니다.

한 가지 방법은 50 개의 클래스와 비슷하며 다른 50 개의 클래스는 서로 다른 동작을한다는 것은 추상 클래스를 사용한다는 것을 의미합니다. 메소드를 정의합니다.

처음 50 개 클래스에 사용하고 나머지 50 개 클래스는 서로 다른 동작을하므로 클래스 비헤이비어에 따라 기존 메서드를 재정의하십시오. 두 클래스는 다음 추상 사용에 대한

Interface Graphics 
{ 
    void size(); 
    void draw(); 

} 

Class Rectangle implements Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    void draw() 
    { 
     ..... 
    } 

} 
class Triangle implements Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    void draw() 
    { 
     ..... 
    } 

} 

때문에 크기는 모두 동일

abstract class Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    abstract void draw(); 

} 

그리고 모든 클래스는 크기가 유사하다 만 draw() 를 정의하는이 클래스를 확장하는 경우 몇 가지 클래스가 필요한 경우 다른 위치는 크기를 무시합니다.

0

이 같이 더 많은 면접 질문 - 오래 arround에 존재하고 의견을 갖거나 이런 저런 생각을 백업하는 많은 사람들과 그 논의 중 하나입니다 무엇을 사용하는 경우에 대한

Decission. 거의 항상 작동하는 기본 규칙이 있다고 생각합니다. "A is B"라는 문장을 만들 수 있다면 추상화와 상속을 사용하십시오. "A는 할 수있다"라는 문장을 만들거나 클래스가 무엇인지에 대한 추상화, 즉 클래스가 수행 할 수있는 인터페이스를 만들 수있는 경우 인터페이스를 사용하십시오.

예를 들어, 삼각형이 다각형이라고 말할 수는 있지만 삼각형이 다각형이 될 수 있다고는 말할 수 없습니다.

어쨌든 이처럼 어림짐작은 다음과 같습니다. 상식을 사용하십시오. 위의 규칙이 당신에게 반대라고 말하는 경우에도 인터페이스가 단지 더 잘 맞을 때가 있습니다 (물론 결과를 고려한 후).

1

예제가 유용 할 수 있습니다. 아래 시나리오를 참조하십시오. A가 B를 확장하고 새로운 클래스 C를 만들 때

1.class A extends B{ 
.. 
.. 
.. 
} 

, 당신은 (당신이 B와 그 안에 새로운 방법을 추가하는 경우 A는 B 그래서 go for Interface.

2.class A implements B { 
.. 
.. 
} 

와 함께 C를 확장 할 수 없습니다 B)는 100 개의 클래스로 구현되므로 모든 클래스에서 새 메서드를 구현하기가 어렵습니다. 따라서 은 추상 클래스으로 이동하고 골격 구현과 함께 새 메서드를 추가합니다.

더 도움이 필요하면 Joshua Bloch의 Effective Java을 읽으십시오.

관련 문제