보기보기 개발 블로그

eclipse / 자바 오버라이딩 본문

Java

eclipse / 자바 오버라이딩

bokboks 2023. 4. 20. 10:31

안녕하세요 지난 포스팅에서는 

자바 생성자에 대하여 알아보았고 이번에는

자바 오버라이딩에 대하여 알아보겠습니다.

 

 

eclipse / 생성자

안녕하세요 지난 포스팅에서는 자바 상속에 대하여 알아보았고 이번엔 생성자에 대해 알아보겠습니다. eclipse / 자바 상속 안녕하세요 바빠서 간만에 포스팅 올려봅니다 지난 포스팅에선 자바

stackbok.tistory.com

 


package javaexp.a09_inheriy;

public class A03_Overriding {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 #메소드 재정의(overriding)
		 1. 부모 클래스의 상속 메소드 수정해 자식 클래스에서
		 재정의 하는것
		 ㄴ> 다형성 처리(효과적! 효과를 알 수 있음)
		 2. 메소드 재정의 조건
		 	1) 부모 클래스의 메소드와 동일한 메서드명을 가져야 한다.
		 	2) 접근 제한을 더 강하게 오버라이딩 하는것을 불가하다.
		 		상위 default(x) ==> 하위 default(x),protected, public
		 		상위 protected ==> 하위 protected, public
		 		상위 public ==> 하위 public
		 		
		 3. @Override 어노테이션
		 	컴파일러에게 부모 클래스의 메소드 선언부와 동일한지 검사 지시
		 	정확한 메소드 재정의 위해 붙여주면 ok
		 	ex) 해당 내용을 선언하고, 오기나 잘못된 메서드 표기시 오버라이딩 할때까지
		 	에러가 표기된다. 이게 재정의 인지 뉴 메서드인지 구분
		 
		 4.메서드 재정의 효과
		 	1) 부모메서드는 숨겨지는 효과 발생
		 		- 재정의된 자식 메소드 실행.
		 */
		soldier s1 = new soldier();
		s1.working();
		TaxiDriver td = new TaxiDriver();
		//td.working();
		/*ex) 재정의 상위클래스로 Company 선언하고 
		 * 회사명, earnMoney() 재정의한 메서드
		 *  하위 SamsungEle, Hyundai
		 * 
		 */
		Samsung sam = new Samsung();
		sam.earnMoney();
		Hyundai hy = new Hyundai();
		hy.earnMoney();
	}
}
class Company{
	private String comp;
	Company(String comp){
		this.comp = comp;
	}
	public void earnMoney() {
		System.out.println(comp+"회사매출");
	}
}
class Samsung extends Company{
	public Samsung(String name) {
		super(name);
	}
	public Samsung(){
		super("삼성전자"); //this("삼성전자") 하면 위 메서드 호출
		//this() 현재 선언돈 생성자를 호출
		//super() 는 부모 클래스에서 선언되 생성자호출
		//this 는 현재
	}
	@Override 
	//오버라이드 : 재정의 여부 확인 없으면 earnMoney1() 이런건 재정의가 아니다
	//@Override 를 선언하면 재정의 메서드인지를 확인하여 컴파일시 , check해줌
	//오타등을 확인 만약 오버라이딩을 안써놓은채로 했는데 오타나서 1 이렇게 들어가면 그건
	//다른메서드다
	public void earnMoney() {
		super.earnMoney();
		//상위에 있는 부모가 가진메서드를 호출
		// 재정의 하였기에 부모클래스가 선언한 메서드와 동일한 메서드를 가지고 있다.
		//부모의 메서드 내용을 구분하여 호출할 때 , super.메서드 를 활용한다.
		System.out.println("20000 을벌어들임");
	}
}
class Hyundai extends Company{
	public Hyundai(){
		super("현다이");
	}
	@Override
	public void earnMoney() {
		super.earnMoney();
		System.out.println("10000 을 벌어들임");
	}
}
class Worker01{
	private String kind;

	public Worker01(String kind) {
		this.kind = kind;
	}
	public void working() {
		System.out.println(kind+"일을 합니다!");
	}
}
class soldier extends Worker01{

	public soldier() {
		super("군인");
	}
	// 재정의 : 동일한 메서드를 정의..
	//내일은 다형성을 배운다 폴리몰리? 폴리몰리
	public void working() {
		super.working(); // 현재 정의된 클래스와 상위클래스를 구분하게 super.활용
		System.out.println("나라를 지킵니다");
	}
}
class TaxiDriver extends Worker{

	public TaxiDriver() {
		super("택시운전기사");
	}

	//@Override
	//public void working() {
		//super.working();
		// TODO Auto-generated method stub
		//System.out.println("택시를 운전합니다.");
	//}

	
}

 


오버라이딩 같은 경우는 오버로딩과 헷갈릴수있습니다

 

오버로딩 : 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도

                 매개변수의 갯수 또는 타입이 다르면 같은 이름을 사용해서 메소드 정의가능

오버로딩 조건 : 메소드의 이름이 같고 매개변수의 개수 또는 타입이 달라야합니다.

                          * 리턴값만 다른것은 오버로딩 을 할수없다. 

 

오버라이딩 : 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는것

오버라이딩 조건 : 부모클래스의 메소드를 재정의하는 것이므로 

                             자식클래스에서는 오버라이딩 하고자 하는 메소드의 이름, 매개변수 , 리턴값이 모두 같아야함

 

* 위 코드에서 @Override는 어노테이션 이라는것으로 일반적인 주석과 다르게 검증하는 기능을 합니다

 

이상으로 오버라이딩에 대하여 알아보았습니다

감사합니다.

'Java' 카테고리의 다른 글

eclipse / 생성자  (0) 2023.04.19
eclipse / 자바 상속  (0) 2023.04.18
eclipse / 자바 패키지  (0) 2023.03.25
eclipse / 자바 1대다 관계 클래스  (0) 2023.03.25
eclipse / 자바 1대1 관계 클래스  (0) 2023.03.25