Software Development/Java

[Java] 메소드 오버라이딩 (Method Overriding)

Mei99 2024. 6. 3. 11:04

오버라이딩(Overriding)
상위 클래스가 가지고 있는 메소드를 하위 클래스에서 같은 시그니처(메소드 이름, 매개변수 타입 및 개수)를 갖는 메소드로 재정의 하는 것. 

=> 상속받은 것을 내가 원하는 대로 커스터마이징 하는 것

=> 상속관계 클래스에서 사용되며 static,final로 선언한 메서드는 오버라이딩이 불가능

 

메소드 오버라이딩 (Method Overriding)

model 패키지 Parent class와 Child class 에 데이터 저장하고, main 패키지의 PersonMain class에서 실행했다.

 

package model;

public class Parent {
	
	//멤버 변수에 이상한것 넣지 못하게 private으로 하고, 게터세터에서 조건 넣어주기
	protected String name;
	protected int age;
	protected int money;
	
	public Parent() {
		System.out.println("Parent Class 생성자 동작 1");
		
	} // 디폴트 생성자 무조건 만들어 주자! => 그래야 다른데서 오류 안 생김.
	
	public Parent(String name, int age, int money) {
		// TODO Auto-generated constructor stub
		this.name = name;
		
		if (age > 0 ) {
			this.age = age;			
		}
		this.money = money;
		
		System.out.println("Parent Class 생성자 동작 2");		
	}

	public void print(){
		System.out.println("이름 : " +name + ", 나이 : " +age + ", 재산 : " +money );
	}
package model;

public class Child extends Parent {
	
	//부모의 함수도 다 상속받는다.
	
	private String hobby;
	
	public Child() {
		System.out.println("Child class 생성자 1");
	}

	public Child(String name, int age, int money, String hobby) {
		// TODO Auto-generated constructor stub
		super(name, age, money); // 부모 생성자 호출 
		this.hobby = hobby;
		System.out.println("Child class 생성자 2");
	}

	public String getHobby() {
		return hobby;
	}

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}

	// 메소드 오버라이딩 (Method Overriding)
    	@Override
    	public void print(){
    		// TODO Auto-generated method stub
        	super.print();
        	System.out.println("취미는 : "+hobby);
	}		
}

 

 

오버라이딩 방법

1. 오른쪽 마우스 클릭 > Source > Override/Implement Methods..

 

2. 오버라이딩 할 함수 선택하기

package Main;

import model.Child;
import model.Parent;

public class PersonMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub		
		
		Parent p = new Parent("홍길동", 55, 100000000);
		// heap 메모리에 객체 생성, new는 메모리를 생성한다는 의미		
		
		p.print();
		
		Child c = new Child("홍나나", 25, 1000000, "게임"); //객체 생성함.
		
		c.print();		
	}
}