본문 바로가기
Language/JAVA

[JAVA]상위클래스 변수를 사용하기 위한 protected 예약어

by 바까 2020. 6. 22.
반응형

protected 

- 상위 클래스에서 작성한 필드(멤버변수)나  메서드(멤버함수) 중  외부 클래스에서 사용할 수 없지만,

하위 클래스에서는 사용 할수 있도록 지정하는 예약어 .

- 상속받은 하위 클래스에서는 public처럼 사용할 수 있다. 

- protected는 상속된 하위 클래스를 제외한 나머지 외부 클래스에서는 private과 동일한 역할을 한다.

- 동일 패키지 내에서는 가시성이 허용된다.

 

| 접근 제한자 가시성

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

 

| 사용 예)

상위클래스

public class Customer {
	//필드변수 정의
	/*
	Customer 클래스 필드(멤버 변수) 정의
	customerID : 고객 아이디
	customerName :고객 이름
	costomerGrade : 고객등급
	bonusPoint : 고객의 보너스 포인트 -> 고객이 제픔을 구매할 경우 누적되는  보너스 포인트입니다.
	bonusRatio : 보너스 포인트 적립 비율 
	*/
	protected int customerID;			//고객 아이디
	protected String customerName;	//고객 이름
	protected String customerGrade;	//고객 등급
	int bonusPoint;					//보너스 포인트
	double bonusRatio;				//적립비율 - 비율, 소수점도 나타낼 것이기 때문에 실수형사 용
	
	/*[참고]모든 필드를 반드시 private로 선언할 필요는 없다. 필요에 따라 필드나 메서드를 외부에 노출하지 않을 목적일 때 선언한다.*/
	/*[참고] 1% = 1/100 = 0.01 로 나타낼 수 있다*/
	
	

하위클래스

//VIPCustomer 클래스는 Customer 클래스를 상속받는다.
public class VIPcustomer extends Customer {
	
	//필드(멤버변수) 정의
	/*상속안썻을때
	//Customer클래스와 겹치는 필드가존재한다.
	private int customerID;			//고객 아이디
	private String customerName;	//고객 이름
	private String customerGrade;	//고객 등급
	int bonusPoint;					//보너스 포인트
	double bonusRatio;				//적립비율 
	*/
	
	//VIP 고객 관련 기능을 구현 할 때만 필요한 멤버 변수
	private int agentID;			//VIP 고객 담당 상담원 아이디
	double saleRatio;				//할인율
	
	//디폴트 생성자 정의
	public VIPcustomer() {
		
		//상위클래스에서 private 변수일때는 오류발생.
		//접근 제한자 protected가 필요.
		/*상위클래스 변수를 사용하기 위한 protected 예약어 -> 상위 클래스에서 작성한 필드(멤버변수)나
		 *메서드(멤버함수) 중  외부 클래스에서 사용할 수 없지만 하위 클래스에서는 사용 할수 있도록 지정하는 예약어
		 *상속받은 하위 클래스에서는 public처럼 사용할 수 있다.
		 *protected는 상속된 하위 클래스를 제외한 나머지 외부 클래스에서는 private과 동일한 역할을 한다.
		 *동일 패키지 내에서는 가시성이 허용된다.
		 */
		customerGrade = "VIP";		//고객등급 VIP
		bonusRatio = 0.05;			//보너스 적립 5%
		saleRatio = 0.1;			//할인률 10%
		//하위클래스를 생성할 때 콘솔 출력문을 작성합니다. 
		System.out.println("VIPcustomer() 생성자를 호출합니다.");
	}
  }

 

반응형

'Language > JAVA' 카테고리의 다른 글

[JAVA]업캐스팅(upcasting)  (0) 2020.06.22
[JAVA]부모를 부르는 SUPER 예약어  (0) 2020.06.22
[JAVA]상속과 다형성  (0) 2020.06.22
[JAVA]클래스 메서드  (0) 2020.06.18
[JAVA]static 변수  (0) 2020.06.18

댓글