TIL11 [생활코딩]

givemacdonalds·2023년 12월 9일
0

TIL

목록 보기
12/16

[생활코딩]

다형성

하나의 메소드나 클래스가 있을때 다양한 방법으로 동작

오버로딩을 통한 다형성 예제

class O{
	public void a(int param){
    	System.out.println("숫자출력");
    }
    public void a(String param){
    	System.out.println("문자열출력");
    }
}
public class PolymorphismOverloadingDemo{
	public static void main(String[] args){
    	O o = new o();
        o.a(1);
        o.a("one");
    }
}

메소드 a는 하나지만 결과는

숫자출력
문자열출력

다양하게 나오게 된다(오버로딩을 통한 다형성)

클래스와 다형성

메소드와 클래스를 바라보는 시야늘 넓히기 위해서

class A{}
class B extends A{}
public classs PolymorphismDemo1{
	public static void main(String[] args){
    	A obj = new B();
    }
}

클래스 A를 상속 받은 B
클래스 B를 obj로 인스턴스화
데이터 타입은 A인 obj

이게 무슨 말이지...

class A{
	public String x(){return "x";}
}
class B extends A{
	public String y(){return "y";}
}
public class polymorphismDemo1{
	public static void main(Strin[] args){
    	A obj = new B();
        obj.x();
        obj.y(); // 이 부분에서 error
    }
}

obj는 실질적으로는 class B를 인스턴스화하고 있지만 class A행세를 하고 있음
==> 부모 클래스인 A에는 메소드 y가 없으므로 error가 발생함

  1. 어떠한 클래스를 담는 인스턴스화 시킬때 데이터 타입은 본인의 클래스일수도 있지만 부모 클래스 일 수도 있음

위의 소스 코드를 더 추가해봄

class A{
	public String x(){return "A.x";}
}
class B extends A{
	public String x(){return "B.x";} // 클래스 A의 메소드 x를 오버라이딩(우선순위가 높음)
	public String y(){return "y";}
}
public class polymorphismDemo1{
	public static void main(Strin[] args){
    	A obj = new B();
        System.out.println(obj.x());  // B.x
    }
}	

위 코드의 출력 값은 B.x 가 나오게 됨(class B의 x()를 선택함) : 오버라이딩 하면서 인스턴스화 시킨 메소드를 사용하게 됨

위 코드에서 코드를 더 추가함

class A{
	public String x(){return "A.x";}
}
class B extends A{
	public String x(){return "B.x";} 
    public String y(){return "y";}
}
class B2 extends A{
	public String x(){return "B2.x";} 
}
public class polymorphismDemo1{
	public static void main(Strin[] args){
    	A obj = new B();
        A obj2 = new B2();
        System.out.println(obj.x()); //B.x
        System.out.println(obj2.x()); //B2.x
    }
}	

위 코드의 출력 값은

B.x
B2.X

0개의 댓글