자바

[JAVA] 상속과 다형성

코딩하는둥이 2022. 11. 26. 20:01

상속이란?

 - 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능이 확장되는 클래스를 구현함

 - 상속하는 클래스: 상위 클래스, parent class, base class, super class

   상속 받는 클래스: 하위 클래스, child class, derived class, subclass

   클래스 상속 문법

         class B extends A{

 

         }

A클래스가 B클래스에게 상속한다. B클래스가 A클래스를 상속받는다.

 - 상위 클래스는 하위 클래스보다 일반적인 의미를 가짐

 - 하위 클래스는 상위 클래스보다 구체적인 의미를 가짐 

extends 뒤에는 단 하나의 class만 사용할 수 있음. 자바는 single inheritance 만을 지원함

 

접근 제한자 가시성

  외부 클래스 하위 클래스 동일 패키지 내부 클래스
public O O O O
protected X O O O
선언되지 않음
(default)
X X O O
private X X X O

 

수정한 Customer 클래스

 - 따라서 Customer 클래스에 선언된 private 변수를 protected로 선언함

public class Main
{
     protected int customerID;
     protected String customerName;
     protected String customerGrade;
     int bonusPoint;
     double bonusRatio;
}

상속에서 클래스 생성 과정

 - 하위 클래스가 생성 될떄 상위클래스가 먼저 생성됨

 - 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨

 - 하위 클래스의 생성자에서는 무조건 상위클래스의 생성자가 호출되어야 함

 - 아무것도 없는 경우 컴파일러는 상위 클래스의 기본 생성자가 호출하기 위한 super()를 코드에 넣어 줌

 - super() 호출되는 생성자는 상위 클래스의 기본 생성자임

 - 만약 상위 클래스의 기본 생성자가 없는 경우 ( 매개변수가 있는 생성자만 존재하는 경우) 하위 글래스는 명시적으로 상위 클래스를 호출해야 함  

 

상속에서의 메모리 상태

 - 상위 클래스의 인스턴스가 먼저 생성이 되고, 하위 클래스의 인스턴스가 생성됨

 - 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨

 

super 예약어

 - this가 자기 자신의 인스턴스의 주소를 가지는 것처럼 

 - super는 하위 클래스가 상위 클래스에 대한 주소를 가지게 됨

 - 하위 클래스가 상위 클래스에 접근할 때 사용할 수 있음

 

상위 클래스로의 묵시적 형 변환(업캐스팅)

 - 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음

 - 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형변환이 가능함

    Custimer VC = new VIPCustomer(); 

     선언된 클래스형(상위 클래스형)     생성된 인스턴스의 클래스형 (하위 클래스형)

       - VIPCustomer() 생성자의 호출로 인스턴스는 모두 생성되지만 타입이 customer 이므로 접근 할 수 있는 변수나 메서드는 Customer의 변수와 메서드임

 

매서즈 오버라이딩(overriding)

 - 상위 클래스에 정의된 메서드 중 하위 클래스와 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의 함

 

// VIPCustomer 클래스의 calcPrice() 매서드 재정의
public int calcPrice(int price){
    bonusPoint += price * bonusRatio;
    return price - (int)(price * saleRatio);
}
// 보너스 포인트 적립하고 할인률을 적용한 가격을 반환

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'자바' 카테고리의 다른 글

[JAVA] 출력 형식  (0) 2022.11.26
[JAVA] 백준 기초공부 3  (0) 2022.11.26
[JAVA] ArrayList 클래스  (0) 2022.11.26
[JAVA] 다차열 배열  (0) 2022.11.26
[JAVA] 객체 배열 만들기  (0) 2022.11.26