Python - 문제 미리보기
문제 2055
medium
다음 코드의 실행 결과는?
```python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}이(가) 소리를 냅니다")
class Dog(Animal):
pass
class Cat(Animal):
def speak(self):
print(f"{self.name}이(가) 야옹하고 웁니다")
dog = Dog("멍멍이")
cat = Cat("야옹이")
dog.speak()
cat.speak()
```
정답: B
메서드 상속과 오버라이딩:
상속의 기본 원리:
⦁ 자동 상속: 자식 클래스는 부모의 모든 메서드를 자동으로 물려받음
⦁ 오버라이딩: 자식에서 같은 이름의 메서드를 재정의하면 부모 메서드를 대체
코드 실행 과정 분석:
Dog 클래스:
```python
class Dog(Animal):
pass # 아무것도 재정의하지 않음
```
⦁ 상속만: `Animal`의 모든 메서드를 그대로 사용
⦁ `speak()` 메서드: 부모인 `Animal`의 `speak()` 메서드 사용
Cat 클래스:
```python
class Cat(Animal):
def speak(self): # 부모의 speak() 메서드를 오버라이딩
print(f"{self.name}이(가) 야옹하고 웁니다")
```
⦁ 오버라이딩: 부모의 `speak()` 메서드를 자신만의 버전으로 재정의
⦁ 우선순위: 자식 클래스의 메서드가 부모 메서드보다 우선
객체 생성 및 메서드 호출:
```python
dog = Dog("멍멍이") # Dog 객체 생성
cat = Cat("야옹이") # Cat 객체 생성
dog.speak() # Dog에 speak()가 없으므로 → Animal.speak() 호출
# 결과: "멍멍이이(가) 소리를 냅니다"
cat.speak() # Cat에 speak()가 있으므로 → Cat.speak() 호출
# 결과: "야옹이이(가) 야옹하고 웁니다"
```
💡 학습 팁
이 문제를 포함한 Python 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.