최근 클래스 생성/모델링과 관련된 문제가 발생했습니다.인터페이스를 추상 클래스와 비교하여 결정할 때 올바른 구현은 무엇입니까?
클래스로 동물 동물 왕국. 클래스를 사용하여 가상 동물원으로 표현 된 다양한 객체를 만듭니다. 이 가상 동물원에 20 마리의 동물을 넣으십시오 (프로그램의 기본 방법으로 각 동물이 소리를 내도록하십시오.이 동물은 20 종이 아니어야합니다).
나는이 문제에 대해 생각하고 인터페이스가 아닌 추상적 인 클래스 Animal로 가기로 결정했습니다. 그런 다음 두 마리의 Bird, Mammal을 Animal에서 상속받은 클래스로 추가했습니다.
내 구현
public abstract class Animal{
abstract Sound MakeSound();
}
public class Bird : Animal
{
private Sound _sound;
public Bird(Sound sound){
_sound = sound;
}
public Sound MakeSound(){
return _sound;
}
}
//same as above with Mammals
public class Program
{
Animal crow = new Bird("Crow sound");
Console.WriteLine(crow.MakeSound());
Animal dog = new Mammal("Dog sound");
Console.WriteLine(dog.MakeSound());
// and so on with other animals
}
내 질문입니다 - 내 구현 뭐가 문제
- ?
- oops 개념에 따라 동물 왕국을 설계하는 올바른 방법은 무엇입니까?
- 어떤 시나리오에서 우리는 추상 클래스를 통해 인터페이스를 사용하고 그 반대도 마찬가지입니다. (실제 예와 함께)
그런 문제를 개선 할 수있는 온라인 자료에 유익한 제안을하십시오. 감사합니다. .
안녕하세요. 코드 검토라는 Stack Overflow의 자매 사이트에서 더 나은 응답과 도움을 얻을 것이라고 생각합니다. https://codereview.stackexchange.com – raykrow
생성자를 통해 사운드를 제공하면 클래스의 전체 계층 구조를 만드는 것이 바람직하지 않습니다. 당신은 하나의 클래스'Animal'을 가질 수 있고 그것으로부터 모든 동물을 생성 할 수 있습니다 :'var dog = new Animal ("Dog sound");'. 예제를 이해하기 위해서는 이러한 클래스의 특정 종에 고유 한 코드가 있어야합니다. –