다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다.
-www.opentutorials.org-
다형성의 대표적인 예로는 Override 가 있다. 클래스의 부모메소드에 정의되어있는 메소드를 자식클래스의 입맛에 맞게 다양한 형태로 바꿀 수 있음을 의미한다. 자바 다형성의 예시를 확인해보자.
Car 는 모든 자동차 종류의 부모 클래스다. 하위에는 자동차의 한 분류인 SUV 가 있다.
Main.java
class Main {
public static void main(String[] args) {
Car car = new Car();
Car suv = new Suv();
car.run();
suv.run();
}
}
Car.java
public class Car {
int max_speed;
public Car() {
max_speed = 100;
}
public void run() {
System.out.println("car is running..."+this.max_speed);
}
}
Suv.java
public class Suv extends Car {
int max_speed;
public Suv() {
max_speed = 150;
}
@Override
public void run() {
System.out.println("SUV is running..."+this.max_speed);
}
}
Override annotation (@Override) 은 오버라이딩을 지시하는 어노테이션이 아니라, IDE의 문법체크 등의 가이드라인을 제시해주는 역할임을 유념하자. 실제 오버라이딩은 내부에서 일어난다.
실행 결과
C++ 에서는 오버라이딩할 메소드에 'virtual' 키워드를 붙여 구분하지만 자바는 기본적으로 모든 method 를 virtual 로 취급한다. 그래서 만약 자식 클래스의 오버라이딩을 막고 싶다면 해당 메소드에 'final' 키워드를 추가해 다른 클래스에서 함수 변경을 할 수 없게 만든다. 이것이 오버라이딩이다.
업캐스팅
Car car = new Car();
Car suv = new Suv();
하나는 new 생성 연산자와 동일한 클래스타입. 하나는 부모타입 인스턴스를 자식 타입(Suv) 생성자에 의해 참조하고 생성한다.
Suv suv = new Car(); 는 에러가 뜨게된다. 형변환을 할 수 없다.
error: incompatible types: Car cannot be converted to Suv
Suv suv1 = new Car();
자바는 상위클래스의 형변환. 즉 "upcasting" 을 지원한다. 다른 예로, 자바 클래스의 최상위 객체는 "Object" 이므로 내가 만드는 어떤 클래스든 Object 객체로 형변환 할 수도 있다.
ex) Object obj = new Integer(0);
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] == 와 equals() 의 차이 (0) | 2020.10.24 |
---|---|
[Java] abstract class 추상클래스란? (0) | 2020.10.22 |
[Java] StringTokenizer, StringBuffer, StringBuilder 클래스 차이 (0) | 2020.10.03 |
[JAVA] 예외 (Exception) (0) | 2020.09.29 |
[JAVA] Thread 로 은행계좌 문제 (Bank Account Problem)를 확인해보자. (0) | 2020.09.18 |