개발공부

[Java] Method Overriding 메소드 오버라이딩이란 ? 본문

Java/Basic

[Java] Method Overriding 메소드 오버라이딩이란 ?

mscha 2022. 7. 4. 17:52

오버라이딩 Overiding

부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것이다.

오버라이딩은 부모 클래스의 메소드를 재정의 하는 것이므로, 자식 클래스에서는

오버라이딩 하고자 하는 메소드의 이름, 파라미터, 리턴 값이 모두 같아야 한다.

 

예제

Parent.java

public class Parent {
	String name;
	int age;
	private int money;
	
	Parent(){
		System.out.println("Parent 생성자가 호출됨");
	}
	
	void printInfo() {
		System.out.println("name : " + name);
		System.out.println("age : " + age);		
	}
	
	// money에 대한 Getter, Setter 생성
	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}
	
	
}

 

Child.java

 

- super 키워드를 사용하면 부모 클래스의 메소드, 매개변수를 불러올 수 있다.

- 부모클래스의 멤버 변수나 메소드가 private 이면 직접적으로 접근할 수 없고,

  멤버 변수의 경우에는 Getter / Setter를 통해 접근 가능하다.

- @Override의 @ 는 어노테이션(Annotation)이며 주석이라는 뜻이다.

  이는 일반적인 주석과 다르게 검증을 하는 기능이 있다. @Override 라는 어노테이션을

  사용하면 코드상으로 검사했을 때 오버라이딩이 실제로 시행되지 않았다면 컴파일 시 

  오류가 발생한다.

public class Child extends Parent{
	
	// 이 클래스는, Parent 클래스가 가지고 있는
	// 속성들을 상속받을 것이다.
	String hobby;
	
	
	Child(){
		System.out.println("Child 생성자 호출됨");
	}
	
	// Method Overloading : 
	// 하나의 클래스 안에서 똑같은 이름의 함수를 여러개 만드는 것
	
	
	// Method Overriding 메소드 오버라이딩
	// 상속하는 클래스에서 즉, 자식클래스에서
	// 부모 클래스에 들어있는 함수 이름을 그대로 사용해서
	// 내가 원하는대로 내용만 바꿔서 사용하는 것
	
	@Override
	void printInfo() {
		super.printInfo();
		System.out.println("hobby : " + hobby);
	}
}

 

Main.java

public class Main {

	public static void main(String[] args) {
		
		Parent p = new Parent();
		p.name = "부모";
		p.age = 50;
		p.setMoney(10000000);
		p.printInfo();
		System.out.println("money : " + p.getMoney());
		
        
		// 상속받은 Child 클래스를 메모리에 생성 (객체 생성)
		Child c = new Child();
		c.name = "자식";
		c.age = 20;
		c.setMoney(50000);
		c.hobby = "게임";
		c.printInfo();
		System.out.println("money : " + c.getMoney());
		


		
	}

}