2014-01-18 3 views
0

추상 클래스를 가지고있는 뒤에 모든 개념이 정확히 무엇입니까 (제 경우에는 java를 나타냅니다). 나는 그 자체로 구현하기에는 너무 일반적이므로 유용하지 않다는 것을 이해한다. 그러나 반드시 추상이 아닌 것으로 선언하고 추상 클래스 인 경우 동일한 상속을 사용하면 모든 동일한 결과가 나타납니다.추상 메서드 및 클래스 : 뒤에 개념?

시간을 절약하지만 추상 슈퍼 클래스에서 메서드 본문이없고 하위 클래스에서 재정의하는 추상 메서드를 선언하는 것이 가장 큰 이점입니까?

+0

당신이 묻는 대부분의 내용은 다음에서 설명합니다. http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html – kmera

답변

1

기본 클래스에 유용한 서브 클래스에서 재정의되어야하는 메소드가 있다고 가정합니다. 기본 클래스에 메서드를 구현하고 재정의하지 않으면 더미 메서드 본문이 실행될 때까지 오류가 발견되지 않습니다. 메서드와 클래스를 추상화하면 컴파일 타임에 오류가 발견됩니다.

+0

예, 안전 메커니즘과 같은 종류입니까? 추상 클래스의 모든 메소드는 추상화해야합니까? 즉, 추상으로 명명 되었습니까? –

+1

추상적 인 메소드 – kmera

+0

이되고 싶은 추상 메소드가 하나만 있으면 추상 클래스로 선언해야합니다. – kmera

0

당신이 객체를 생성하고 싶지 않을 때 클래스 추상을 만들면 추상 수퍼 클래스에서 일반적인 클래스 메소드를 구현할 수 있습니다. 다른 목적은 메소드를 추상적으로 만들어서 하위 클래스가 반드시 MUST 자신의 구현을 작성하기 위해 슈퍼 클래스 추상 메소드를 구현하십시오. 저것과 같이 쉬운.

1

주요 이점은 추상 클래스를 인스턴스화 할 수 없다는 것입니다. 당신은 사람들이 문서의 해당 유형에 대한 하위 클래스를 만들고 싶어

public class Document { 
    public void write(File file) { 
     // I have no idea how to implement this 
    } 
    public void read(File file) { 
     // I don't know here either 
    } 
} 

:이 같은 클래스 Document있을 수 있습니다

public class MyDocument extends Document { 
    public void write(File file) { 
     // Now I know how to implement 
    } 
    public void read(File file) { 
     // this also can be implemented 
    } 
} 

을하지만 당신은 사람들이 새로운 Document의하고 싶지 않은 :

:
Document doc = new Document(); // this should not be allowed 

는 당신은 사람들이 이런 일을하고 싶지

public abstract class Document 

너무 방법이 추상적 만들기 위해 :

public abstract void write(File file); 
public abstract void read(File file); 

그럼 당신은 Document을 인스턴스화 할 수 있지만 서브 클래스의 인스턴스 수 (210)

이 솔루션은 Document 추상적를 확인하는 것입니다. 서브 클래스는 readwrite을 무시해야합니다.

0

추상 클래스를 API에서 계약을 만드는 방법으로 생각하십시오.

상점이 판매하는 품목 목록이있는 프로그램을 작성한다고 가정합니다. 이제이 목록에는 특정 공통 특성과 특정 개인 특성을 갖는 항목이 포함됩니다. 그러나 우리는 "품목"을 판매 할 수 없습니다 - 우리는 "TV"또는 "테이블"을 판매하고자합니다.

이렇게하면 가격 태그, 제조 날짜 등이 포함 된 추상 클래스 "Item"을 만들 수 있습니다.하지만 아이템이 무엇이든 될 수 있기 때문에 아무도 클래스 클래스의 인스턴스를 만들지 않을 것입니다.

프로그래머가 항목이 필요로하는 계약서를 fullfill하는 항목 유형의 자체 클래스를 하위 클래스로 만들어서 만들길 원합니다. API는 차례로 사용 가능한 항목의 상점 목록에 넣을 하위 클래스 항목을 추가 할 수있게합니다.또한 서브 클래 싱 할 때 고려할 필요가없는 클래스뿐만 아니라 클래스에 구현해야하는 메소드를 재정의해야 할 필요가없는 기능을 자동으로 제공합니다.

Java에서 메서드는 추상 클래스에서 추상 클래스 일 필요는 없으며 일반 클래스와 마찬가지로 구현할 수 있습니다. 예 : orice 태그가있는 경우이 가격 태그에 대한 getter를 구현할 수 있습니다. 하위 클래스에서이 태그를 구현하지 않아도됩니다.

희망적입니다. Else는 내가 언급 할 수 있도록 자유롭게 의견을 말합니다.

+0

메신저 감사를 시작하기 위해 메신저를 시작하는 것은 기본적으로 컨트롤을 구현하는 방법을 제어하는 ​​것뿐 아니라 일반적으로 사용하지 않는 매우 일반적인 수퍼 클래스에 대한 메서드 작성 시간을 낭비하지 않는 것입니다. 또한 OOP의 대부분의 수퍼 클래스가 일반적으로 추상적 인 지 묻습니다. 많은 서브 클래스를 가질 수있는 대부분의 것들이 대개 매우 일반적이기 때문에 그렇게하는 것이 가장 합리적인 것처럼 보입니다. –

+0

초록은 매우 정의에 의해 보편성에 관한 것이다. 동물 애완 동물이 있다고 말하면 애완 동물이 있다는 것을 알게 될 것이지만, 어떤 생각이 들지는 알 수 없습니다. 내가 개를 가지고 있다고 말하면 좀 더 구체적 이겠지 만 내가 가진 애완 동물의 종류는 상상할 수있을 뿐이다. 내가 코기를 가지고 있다고 말하면 갑자기 내가 가지고있는 애완 동물을 정확히 알게된다. I Java Animal은 인터페이스로 선언 될 수 있으며 개는 추상 클래스 일 수 있습니다. Corgi는 일반 클래스입니다. – Dyrborg

+0

왜 재미 있습니까? 음, 내 아파트는 동물성 애완 동물을 허용하지 않을 수도 있습니다. 따라서 어떤 종류의 동물도 배제하거나 고양이는 허용하지만 개는 허용하지 않을 수도 있습니다. 추상 유형 및 일반성은 규칙 및 계약을 지정하는 데 사용됩니다. – Dyrborg