Polymorphism(다형성)

: 하나의 객체나 메서드가 여러 형태로 사용되는 특징

 

Late Binding

- 메서드의 정의와 메서드 실행을 연결시키는 것을 binding이라고 한다.

- 코드가 컴파일 시 binding 되는 경우를 early binding, run time시 binding 되는 것을 late binding 혹은 dynamic binding이라고 한다.

- Java는 late binding을 사용한다. (private, final, static method 는 제외)

 

final Modifier

- final 표기된 method는 오버라이드 될 수 없다. -> base class로 사용될 수 없다!

- final 이 표기된 경우 컴파일러가 early binding을 사용한다.

 

Late Binding with toString

Sale aSale = new Sale("tire gauge", 9.95);
System.out.println(aSale)

toString이 클래스에 정의되어있다면 객체가 System.out.println을 사용하여 올바르게 출력

-> tire gauge Price and total cost = $9.95 (late binding으로 동작)

 

public void println(Object theObject)
{
	System.out.println(theObject.toString());
}

println 메서드는 Sale 클래스가 존재하기 이전에 정의되어있다.

하지만 late binding으로 인해 Object 클래스의 toString이 아닌 Sale 클래스의 toString 메서드가 사용된다.

 

Upcasting and Downcasting

Upcasting : 파생 클래스의 객체가 기초 클래스의 변수에 할당되는 것

Sale saleVariable; //기초 클래스
DiscountSale discountVariable = new DiscountSale("paint", 15,10); //파생 클래스
saleVariable = discountVariable; 	//Upcasting
System.out.println(saleVariable.toString());

-> late binding으로 toString은 Discount 클래스에 정의된 것을 사용한다.

 

Downcasting : 기초클래스의 객체가 파생 클래스의 변수에 할당되는 것

discountVariable = (DiscountSale)saleVariable; // -> run-time error
discountVariable = saleVariable	//-> compiler error
Sale otheSale = (Sale)otherObject; // downcasting

 

clone Method

- 모든 객체는 Object 클래스의 clone 메서드를 상속받는다.

- clone은 기본적으로 얉은복사를 수행한다.

- 클래스가 copy constructor를 갖는 경우 clone 메서드는 copy constructor를 사용할 수 있다.

public Sale clone()
{
	return new Sale(this);
}

public DiscountSale clone()
{
	return new DiscountSale(this);
}

 

Abstract Classes(추상 클래스)

- 추상메서드를 선언하고 상속을 통해 자식클래스에서 메서드를 완성하도록 하는 클래스

- 추상메서드를 포함하는 클래스를 추상클래스라고 한다.

 

Abstract Method(추상 메서드)

- abstract 수식자를 사용한다.

- private로 사용할 수 없다.

- head 부분만 존재하고 body부분은 갖지 않는다.

public abstract class Employee
{
	private instanceVariable;
	public abstract double getPay();
}

 

'Development > OOP(Java)' 카테고리의 다른 글

Ch9. Exception Handling  (0) 2023.05.19
Ch6. Defining Classes(3)  (0) 2023.04.10
Project1 (Timetable application)  (0) 2023.04.05
Ch3. Flow of Control  (0) 2023.04.04
Ch5. Defining Classes(2)  (0) 2023.04.03

+ Recent posts