상속과 다형성 3

1. 메서드 오버라이딩

  • 상위 클래스에 정의된 메서드를 같은 이름과 매개변수로 하위 클래스에서 재정의 하는 것
  • 상속된 메서드의 기능을 수정하거나 추가할 경우 사용

Tip. 오버로딩

  • 이름이 같고 매개변수가 다른 메서드가 여러개 있는 것

2. 묵시적 형 변환과 재정의된 메서드 호출

가상 메서드(virtual method)

  • 객체의 변수나 메서드의 참조는 그 타입에 따라 이루어 지지만, 가상 메서드는 타입과 상관없이 실제 생성된 인스턴스의 메서드가 호출된다

  • 자바는 모든 메서드가 가상 메서드이다

Customer vc = new VIPCustomer(); //Customer타입의 VIPCustomer인스턴스 생성
vc.calcPrice(10000); //메서드 실행 시 
// 메서드가 재정의 되지 않았으면 타입(Customer)의 메서드가 실행된다
// 메서드가 재정의 되었으면 인스턴스(VIPCustomer)의 메서드가 실행된다

3. 다형성(polymorphism)

  • 하나의 코드가 여러가지 자료형으로 구현되는 것
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
  • 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
//다형성 예시
class Animal{
	public void move() {
		System.out.println("동물이 움직입니다.");
	}
}

class Human extends Animal {
	public void move() {
		System.out.println("사람이 걷습니다.");
	}
}

class Tiger extends Animal {
	public void move() {
		System.out.println("호랑이가 뜁니다.");
	}
}

class Eagle extends Animal {
	public void move() {
		System.out.println("독수리가 납니다.");
	}
}

public class AnimalTest {
	public static void main(String[] args) {
		AnimalTest test = new AnimalTest();
		test.moveAnimal(new Human());
		test.moveAnimal(new Tiger());
		test.moveAnimal(new Eagle());
	}
	
	public void moveAnimal(Animal animal) {
		animal.move();
	}
}

태그:

카테고리:

업데이트: