다형성의 의미
•
다형성 : 객체들의 타입이 다르면 똑같은 메시지가 전달 되더라도 서로 다른 동작을 하는 것
package java_0926;
class Shape {
public Shape() {
System.out.println("도형입니다.");
}
public void draw() {
System.out.println("도형을 그립니다.");
}
}
class Rectangle extends Shape {
public Rectangle() {
System.out.println("사각형 생성자");
}
@Override
public void draw() {
System.out.println("사각형 도형을 그립니다.");
}
public void draw2() {
System.out.println("사각형도형 그리기2");
}
}
public class SuperTest {
public static void main(String[] args) {
Shape shape = new Shape();
shape.draw();
Rectangle rec = new Rectangle();
rec.draw();
Shape shape2 = new Rectangle();
shape2.draw();
shape2.draw2(); //오류발생!!
}
}
Java
복사
•
Shape 타입의 객체 shape2 에 자식 클래스인 Rectangle을 대입했다.
•
Shape클래스에는 draw2 메서드를 포함하고 있지 않기 때문에 shape2.draw2()는 에러가 발생한다.
위 메모리 공간중 실제 메모리에 올라가는 메서드는 무엇일까?
다형성을 사용시 장점
1.
유지보수가 쉽다
•
개발자가 여러 객체를 하나의 타입으로 관리가 가능하기 때문에 코드 관리가 편리해 유지보수가 용이하다.
2.
재사용성 증가
•
다형성을 활용하면 객체를 재사용하기 쉬워지기 때문에 개발자의 코드 재사용성이 높아진다.
다형성 사용시 필수 조건
1.
부모-자식 간 클래스 상속이 이루어져야 한다.
2.
하위 클래스 메소드가 재정의(오버라이딩)되어 있어야 한다.
3.
부모타입으로 자식클래스를 업캐스팅하여 객체를 생성해야 한다.
자바의 상속관계는 부모클래스의 모든 속성(필드변수, 함수)들을 자식클래스가 받아서 사용할 수 있다
업캐스팅
자식클래스의 객체가 부모클래스의 타입으로 형 변환이 되는 것
class TV {
String name;
int price;
public void printTV() {
System.out.println("TV가 보여요");
}
}
class ColorTv extends TV{
int color;
@Override
public void printTV() {
System.out.println("Color TV가 보여요");
}
}
public class TvTest {
public static void main(String[] args) {
TV tv = new ColorTV(); // upcatsing
ColorTV tv = new TV(); // 컴파일 오류
}
}
Java
복사
업캐스팅을 하는 이유는 무엇일까?
다운캐스팅
업캐스팅 된 객체를 다시 부모클래스 타입의 객체로 형 변환하는 것
class TV {
String name;
int price;
}
class ColorTV extends TV{
int color;
}
public class TvTest {
public static void main(String[] args) {
TV tv = new ColorTV(); // upcatsing
ColorTV colorTV = (ColorTV) tv; // downcasting
}
}
Java
복사
캐스팅으로 인해 데이터타입이 혼동이 올 때