구체적 클래스와 추상 클래스의 차이점은 무엇입니까?


대답 1:

유일한 차이점은 구체적인 클래스는 모든 메소드에 대한 구현을 제공하거나 상속하기 때문에 인스턴스화 할 수 있다는 것입니다. 최소한 하나의 메소드가 구현되지 않았기 때문에 추상 클래스를 인스턴스화 할 수 없습니다.

추상 클래스는 확장되어야합니다. 이들이 구현 세부 사항을 제공하면, 모든 하위 클래스에서 재사용 할 수 있습니다. 특별한 경우는 구현이 전혀없는 순수한 추상 클래스입니다. 이 클래스는 코드 재사용에 도움이되지 않으므로 기본적으로 다릅니다. 이 차이점은 두 가지 유형의 상속으로 설명됩니다.

  1. 구현 상속-코드 재사용 메커니즘 제공 인터페이스 상속-서브 타이핑 메커니즘 제공

클래스 B가 클래스 A를 확장한다고해서 반드시 B가 A라는 의미는 아닙니다. B가 A의 일부 코드를 상속한다는 의미 일 수도 있습니다. 항상 명확하지는 않으며 일부 언어는이를 하위 입력과 혼동합니다.

Java는 인터페이스라고하는 서브 타이핑을위한 다른 구문을 제공하는 언어의 예입니다. 인터페이스는 기본적으로 순수한 추상 클래스입니다. 클래스 B가 인터페이스 A를 구현하면 B는 A입니다.

언어가 인터페이스 상속에서 구현 상속을 분리하면 특정 문제를 다르게 처리 할 수 ​​있습니다. 예를 들면 다음과 같습니다.

  1. Java는 클래스가 두 개의 슈퍼 클래스를 갖지 못하도록하여 다중 상속의 복잡성을 회피합니다. 그러나 클래스는 여러 인터페이스를 자유롭게 구현할 수 있으며 상속보다 구성을 선호하는 원칙을 따르는 것이 더 쉽습니다. 너무 많은 클래스를 확장하면 클래스 계층이 복잡해 지지만 너무 많은 인터페이스를 구현하는 것은 큰 문제가되지 않습니다. 프로그램을 통한 실행 흐름을 추적 할 때 인터페이스에는 실행 코드가 포함되어 있지 않기 때문에 문제를 복잡하게 만들 수 없습니다.

대답 2:

추상 클래스는 일반적으로 부분적으로 구현되거나 구현되지 않습니다. 반면에, 구체적인 클래스는 항상 그 동작을 완전히 구현합니다. 구체적인 클래스와 달리 추상 클래스는 인스턴스화 할 수 없습니다. 따라서 추상 클래스를 유용하게 사용하려면 확장해야합니다. 추상 클래스에는 추상 메소드가 포함될 수 있지만 구체적인 클래스는 그렇지 않습니다. 추상 클래스가 확장되면 모든 메서드 (추상 및 구체적)가 상속됩니다. 상속 된 클래스는 일부 또는 모든 메소드를 구현할 수 있습니다. 모든 추상 메소드가 구현되지 않으면 해당 클래스도 추상 클래스가됩니다.


대답 3:

어느 클래스에서나 구현할 인터페이스가 있다고 가정 해 봅시다.

구체적 클래스는 모든 인터페이스 메소드를 구현하므로 더 이상 고민하지 않고 인스턴스화 할 수 있습니다.

어떤 이유로 특정 메소드의 구현을 생략하려는 경우 (예를 들어, 인터페이스가 거의 다른 두 가지 구현을 작성하려는 경우) 직접 클래스화할 수없는 추상 클래스를 작성합니다. 추상 클래스를 인스턴스화하려면 나머지 메소드를 구현하는 구체적인 서브 클래스 ( "extends")를 작성하거나 인스턴스화 할 때 후자의 구현을 제공하십시오 (기술적으로 동일 함 : "구체적인 서브 클래스를 작성했습니다"). 익명의 사람).


대답 4:

어느 클래스에서나 구현할 인터페이스가 있다고 가정 해 봅시다.

구체적 클래스는 모든 인터페이스 메소드를 구현하므로 더 이상 고민하지 않고 인스턴스화 할 수 있습니다.

어떤 이유로 특정 메소드의 구현을 생략하려는 경우 (예를 들어, 인터페이스가 거의 다른 두 가지 구현을 작성하려는 경우) 직접 클래스화할 수없는 추상 클래스를 작성합니다. 추상 클래스를 인스턴스화하려면 나머지 메소드를 구현하는 구체적인 서브 클래스 ( "extends")를 작성하거나 인스턴스화 할 때 후자의 구현을 제공하십시오 (기술적으로 동일 함 : "구체적인 서브 클래스를 작성했습니다"). 익명의 사람).