"안녕하세요, 아미고! 어제 당신은 추상 수업 방식으로 교육을 받았습니다. 이제 우리의 지식을 심화시킬 시간입니다. 추상 수업을 올바르게 사용하는 방법을 가르치고 싶습니다."

추상 클래스에 대한 실제 비유를 제시하기는 어렵습니다. 클래스는 일반적으로 일부 엔터티의 모델입니다. 그러나 추상 클래스에는 구현되지 않은 메서드가 포함되며 구현된 메서드가 포함될 수 있습니다. 그게 무슨 뜻이야? 추상 클래스에 대한 어떤 비유를 찾을 수 있습니까? 현실 세계에 그런 것이 있습니까?

실제로 있습니다. 컨베이어 벨트에 거의 완성된 자동차의 섀시를 상상해 보십시오. 성능이 향상된 엔진 또는 고성능 엔진을 설치할 수 있습니다. 가죽 인테리어 또는 패브릭 커버. 자동차의 특정 구현은 아직 결정되지 않았습니다. 또한 섀시를 사용하여 여러 특정 구현을 생성할 수 있습니다. 그러나 아무도 현재 형태의 자동차를 원하지 않습니다. 이것은 고전적인 추상 클래스 입니다 . 이 클래스의 인스턴스를 만드는 것은 의미가 없으므로 만들 수 없습니다. 클래스는 기반으로 생성될 많은 본격적인 상속인 때문에 의미가 있습니다.

"충분히 쉽습니다."

그러나 훨씬 더 추상적인 비유가 있을 수 있습니다. 몇 가지 구현된 메서드가 있는 인터페이스와 비슷합니다. 예를 들어, 전문 통역사를 고려하십시오 . 소스 및 대상 언어를 지정하지 않고 « 추상 번역기 »가 있습니다. 또는 경호원을 고려하십시오. 우리는 그가 무술을 마스터했고 그의 의뢰인을 보호할 수 있다는 것을 알 수 있습니다. 그러나 어떤 무술과 그가 클라이언트를 보호하는 방법은 각 특정 경호원의 "구현 세부 사항"입니다.

예를 살펴보겠습니다.

자바 코드 설명
abstract class BodyGuard
{
 abstract void applyMartialArts(Attacker attacker);

 void shoot(Attacker attacker)
 {
    gun.shoot(attacker);
 }

 void saveClientLife(Attacker attacker)
 {
  if (attacker.hasGun())
     shoot(attacker);
  else
     applyMartialArts(attacker);
 }
}
BodyGuard 클래스는 공격에 대처하는 방법(무술을 쏘거나 사용)을 결정합니다.

그러나 특정 무술은 명시되어 있지 않지만 기술이 존재한다고 확신합니다.

우리는 (이 클래스를 상속함으로써) 여러 다른 경호원을 만들 수 있습니다. 그들 모두는 클라이언트를 보호하고 공격자를 쏠 수 있습니다.

"네 말이 맞아. 구현된 몇 가지 메서드가 있는 인터페이스와 매우 흡사해."

"예, 이러한 유형의 추상 클래스는 표준 Java SE 클래스에서 일반적입니다."