※ 오버라이딩
하는 이유: 부모쪽의 기능이 상속받기엔 적절하지 않아서 그 기능을 재정의한다.
오버라이딩은 상속 관계에서 사용되며, 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것.
부모 클래스의 메서드와 메서드 시그니처가 동일해야 하며, 자식 클래스에서 오버라이딩된 메서드는 부모 클래스의 메서드를 가리게 되며, 동일한 메서드 호출 시 자식 클래스의 오버라이딩된 메서드가 실행.
오버라이딩은 다형성의 일부로, 런타임 시에 메서드의 동작이 결정.
class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Cat extends Animal {
void makeSound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Cat cat = new Cat();
animal.makeSound(); // 출력: Animal makes a sound
cat.makeSound(); // 출력: Cat meows
// 업캐스팅을 통해 Cat 클래스의 객체를 Animal 타입으로 다룸
Animal animalCat = new Cat();
animalCat.makeSound(); // 출력: Cat meows
}
}
- Animal 클래스의 makeSound() 메서드를 Cat 클래스에서 오버라이딩했습니다. 따라서 Cat 클래스의 객체에서 makeSound()를 호출하면, Animal 클래스의 메서드가 아니라 Cat 클래스의 오버라이딩된 메서드가 실행
포유류
- 젖을 먹인다
- 소리를 낸다
▷ 고양이과 : 고양이, 호랑이, 사자
각각 다른 소리를 낸다, 독립생활 한다.
▷ 개과 : 개, 늑대
각각 다른 소리를 낸다, 무리생활 한다.
▷ 하마 : 하마 소리를 낸다
※ 다형성
코드 한줄을 가지고 여러 형태로 호출될 수 있다.
다형성을 위해서는 공통점이 있어야 함.
상속 관계의 메서드 이름이 동일해야 한다.
java.lang.Object
toString()은 클래스이름@해시코드로 표현한 문자열을 리턴
- String : String 클래스의 toString() 메서드는 객체가 가지고 있는 문자열 값을 반환. 이 메서드는 오버라이딩되어 있어서 객체의 문자열 값 자체를 반환하게 됩니다.
- StringBuilder // 오버라이딩 안되있음, StringBuilder 클래스의 toString() 메서드는 현재 StringBuilder 객체의 내용을 문자열로 반환합니다. 이 메서드도 오버라이딩되어 있지만, 일반적으로 직접 호출하기보다는 StringBuilder 객체를 String으로 변환할 때 자동으로 호출됩니다.
- Date toString(): Date 클래스의 toString() 메서드는 해당 Date 객체의 문자열 표현을 반환합니다. 이 문자열 표현은 보통 "요일 월 일 시:분:초 타임존 연도"와 같은 형식입니다.
→ 위에서 언급한 세 가지 클래스의 toString() 메서드는 각 클래스의 특성에 따라 다른 결과를 반환합니다. String은 문자열 그대로, StringBuilder는 그 안에 저장된 문자열, Date는 특정 날짜와 시간 정보를 문자열로 반환합니다. 각 클래스에서 toString() 메서드의 기본 동작을 오버라이딩하여 필요에 맞게 재정의할 수도 있습니다.
'언어 > Java' 카테고리의 다른 글
메서드 오버라이딩 (0) | 2023.08.01 |
---|---|
업캐스팅(Upcasting), 다운캐스팅(Downcasting) (0) | 2023.08.01 |
상속 예제 (0) | 2023.07.31 |
상속(Inheritance) (0) | 2023.07.31 |
싱글톤 (0) | 2023.07.31 |