JAVA/Java 기초

오버라이딩(overriding).java

john_ 2023. 1. 12. 18:41
728x90

2023.01.12 - [JAVA/Java 기초] - 상속.java

 

상속.java

2023.01.11 - [JAVA/Java 기초] - 싱글톤 패턴.java 싱글톤 패턴.java 2023.01.11 - [JAVA/Java 기초] - Getter & Setter .java Getter & Setter .java 2023.01.11 - [JAVA/Java 기초] - 패키지.java 패키지.java 2023.01.11 - [JAVA/Java 기초] -

less-go.tistory.com

 


메소드 오버라이딩

  • 상속된 메소드를 자식 클래스에서 재정의하는 것.
  • 해당 부모 메소드는 숨겨지고, 자식메소드가 우선적으로 사용됩니다.

부모의 메소드보다 자식의 메소드가 우선시됩니다.

  • 부모 메소드의 선언부(리턴 타입, 메소드 이름, 매개변수)와 동일해야합니다,
  • 접근 제한을 더 강하게 오버라이딩 할 수 없습니다.(public -> private 변경 불가)
  • 새로운 예외를 throws 할수 없습니다.

 

//부모 클래스 
public class Calculator {
	public double areaCircle(double r) {
		System.out.println("Calculator 객체의 areaCircle() 실행");
		return 3.141592 * r * r;
	}
}

//자식클래스
public class Computer extends Calculator {
	//메소드 오버라이딩 할 클래스
	@Override 	// 오버라이딩 할때는 이런식으로 표시합니다.
				// 컴파일시 정확히 오버라이딩 되었는지 체크해줍니다. 생략가능
	public double areaCircle(double r) {
		System.out.println("Computer 객체의 areaCircle() 실행");
		return Math.PI * r * r;
	}
}

//실행부
public class ComputerExam {

	public static void main(String[] args) {

		int r = 10;
		
		Calculator calculator = new Calculator(); // 부모 클래스에서 객체 생성
		System.out.println("원에 대한 면적 : " + calculator.areaCircle(r));
		System.out.println();
		
		Computer computer = new Computer();		// 자식 클래스에서 객체 생성
		System.out.println("원 면적 : " + computer.areaCircle(r));
		// 자식 클래스에서 부모메서드인 areaCircle()이 있지만 자식클레스에서 areaCircle()에 대한 메서드를 수정했다면
		// 자식 클래스에서 수정한 areaCircle()만 실행이 가능합니다. 오버라이딩 특징!
	}
}
결과 : 
Calculator 객체의 areaCircle() 실행
원에 대한 면적 : 314.1592

Computer 객체의 areaCircle() 실행
원 면적 : 314.1592653589793

 


 

오버라이딩의 예시

package java_practice;
// 부모클래스 : Student
public class Student {
	void learn() {
		System.out.println("배우기");
	}
	void eat() {
		System.out.println("밥먹기");
	}
	void say() {
		System.out.println("선생님 안녕하세요!"); // 보통의 학생
	}
}
package java_practice;
//자식 클래스 : Leader
public class Leader extends Student{
	void lead() {
		
	}
	void say() {
		System.out.println("선생님께 인사"); // 오버라이딩
	}
}
package java_practice;
//실행부
public class Inheritance2 {

	public static void main(String[] args) {

		Leader leader1 =new Leader();
		leader1.eat();	// 상속 받은 메서드 사용
		leader1.say();	// 오버라이딩한 메서드 사용
	}
}

 

결과 :
밥먹기
선생님께 인사

 

728x90

'JAVA > Java 기초' 카테고리의 다른 글

추상클래스.java  (0) 2023.01.16
메소드 재정의.jav  (0) 2023.01.13
클래스와 인스턴스 등...(리마인드용)  (0) 2023.01.12
상속.java  (1) 2023.01.12
static 이란?  (0) 2023.01.11