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 |