[JAVA] 다형성 (추상 클래스 / 인터페이스 / 바인딩)

Dawon Ruby Choi·2023년 9월 1일
0

Java

목록 보기
15/18
post-thumbnail

다형성 (Polymorphism)

다형성 : 자식 객체를 부모 클래스 하나로 다룰 수 있는 기술

다형성 특징
1) 상속이 전제되어 있어야한다.
2) 메소드를 여러개 만들 필요가 없다는 장점

원래는 
Animal a = new Animal();
Dog d = new Dog();
였지만

Animal a = new Animal();
Animal d = new Dog();

처럼 자식 객체를 부모 타입에 담을 수 있음

클래스의 형변환

1-1) 업 캐스팅

1-2) 다운 캐스팅

	System.out.println("1. 부모타입 레퍼런스로 부모 객체 다루는 경우");
		Parent p1 = new Parent();
		//ㄴ부모타입 레퍼런스   ㄴ부모객체
		p1.printParent();
		
		System.out.println("2. 자식타입 레퍼런스로 자식 객체 다루는 경우");
		Child1 c1 = new Child1();
		//ㄴ 자식타입 레퍼런스	ㄴ자식객체
		c1.printChild1();
		c1.printParent();
		
		System.out.println("3. 부모타입 레퍼런스로 자식 객체 다루는 경우");
		Parent p2 = new Child2();
		//ㄴ부모타입 레퍼런스   ㄴ자식객체 // 업캐스팅
		//p2.printChild2(); heap 메모리에 child 객체를 담고있지만 그 child 안에 담겨있는 parent만 보이는 것
		p2.printParent();

instance Of 연산자

여러개의 객체들 중 어떤 객체를 다운캐스팅 할건지 확인하는 연산자

바인딩

  1. 부모 클래스 타입에 연결 = 정적바인딩
  2. 부모 클래스에는 상속으로 연결되어서 자식 객체로 담겨져 잇으면서
    동시에 호출하려는 메소드가 오버라이딩 되어있는 메소드라
    정적 바인딩을 끊고 오버라이딩 되어있던 자식 타입에 다시 연결 (바인딩 변경)
    == 동적 바인딩

추상 클래스 (abstract class)

추상 메소드를 갖고있는 부모 클래스를 자식 클래스가 상속받는다면 오버라이딩이 강제화됨

※추상 클래스는 무조건 추상 메소드를 가지고 있지는 않음

추상 클래스 특징

1) 자체적으로 객체 생성 불가해서 new 사용 불가
상속 후 자식 클래스를 통해 생성해야함
2) 추상 클래스 내 일반 메서드 호출 가능

인터페이스
추상 클래스가 가지고 있는 기능을 조금 더 까다롭게 강화하기 위해 만든 것

1) 일반 메서드 호출 불가하고, 무조건 추상 메서드만 호출 가능
2) 변수는 final만 받음 (public static final 생략 가능)
3) abstract 예약어 생략 가능 (기본 전제가 abstract 이기 때문)

※헷갈리지 말기
클래스 구현 / 상속 > extends
인터페이스 구현 > implements
인터페이스 상속 > extends

profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글