상속 (Inheritance) - 3

DONI·2021년 8월 24일
0

Java

목록 보기
34/46
post-thumbnail

🏹 오버라이딩 (Overriding)

자식 클래스가 상속 받은 부모 클래스의 메서드를 재정의하는 것
오버라이딩된 자식 메서드가 호출 시 우선권을 가짐
메서드 헤드라인 앞에 @Override 어노테이션 작성

  • 오버라이딩 조건
    1. 메서드 이름 및 반환형이 같아야 한다.
    2. 매개변수의 개수, 타입, 순서가 모두 같아야 한다.
    3. 접근제한자는 같거나 더 넓은 범위여야 한다.
      💥 private 메서드 오버라이딩 불가
    4. 예외처리는 같거나 더 구체적이어야 한다.

🚩 소스코드

package com.kh.p2.over.parent.model.vo;
public class Shop {
	private String owner;  	// 가게주인
	private String address;	// 주소
	
	public Shop() {
		super();
	}
	
	public Shop(String owner, String address) {
		super();
		this.owner = owner;
		this.address = address;
	}
	
	// getter, setter 메서드 생략
	
	public void order(String str) {
		System.out.println(str + address + "에 있는 " + owner + " 가게에서 주문한다.");
	}

}
package com.kh.p2.over.child.model.vo;
import com.kh.p2.over.parent.model.vo.Shop;
public class CoffeeShop extends Shop {
	private String coffeeName;  // 커피명
	private int price;          // 가격
	private String shopName;    // 가게명
	
	public CoffeeShop() {
		super();
	}
	
	public CoffeeShop(String owner, String address, String coffeeName, int price, String shopName) {
		super(owner, address);
		this.coffeeName = coffeeName;
		this.price = price;
		this.shopName = shopName;
	}
	
	// getter, setter 메서드 생략
	
	@Override
	public void order(String str) {
		System.out.println(str + " " + super.gerOwner() + "의 " + shopName + " 가게에서 "
				+ coffeeName + "를 " + price + "원을 주고 주문한다.");
	}
	
}
package com.kh.p2.over.run;
import com.kh.p2.over.parent.model.vo.Shop;
import com.kh.p2.over.child.model.vo.CoffeeShop;
public class Run {
	public static void main(String[] args) {
		Shop sp = new Shop("박씨네", "서울 관악구");
		sp.order("부모 메서드 >> ");
		
		CoffeeShop cs = new CoffeeShop("하람코", "서울 종로구", "딸기라떼", 4000, "메가커피");
		cs.order("오버라이딩에 의한 자식 메서드 >> ");
	}

}

🧶 출력 결과

부모 메서드 >> 서울 관악구에 있는 이씨네 가게에서 주문한다.
오버라이딩에 의한 자식 메서드 >> 하람코의 메가커피 가게에서 딸기라떼를 4000원을 주고 주문한다.


🏹 어노테이션 (Annotation) - @

코드 사이에 주석처럼 쓰이면서 특별한 의미, 기능을 수행하도록 하는 기술로,
프로그램에 추가적인 정보를 제공해주는 메타 데이터

   🌼 메타 데이터 : 데이터를 위한 데이터로, 컴파일 또는 런타임 과정에서
     코드를 어떻게 처리할 것인지 알려주는 서브 데이터 (데이터에 대한 설명을 의미)

  • 어노테이션 용도
    • 컴파일러가 코드 작성 문법 에러를 체크하도록 정보 제공
    • 소프트웨어 개발툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
    • 런타임 시 특정 기능을 실행하도록 정보 제공
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글