JAVA 7강_3_오버라이딩 (Overriding)

열라뽕따히·2024년 2월 15일

JAVA

목록 보기
41/79

메서드 재정의 (Method Overriding) 이란?

: 부모 클래스에서 정의한 메서드를 자식 클래스에서 자식 클래스에 맞게 다시 작성(재정의) 하는 것을 말함

[메서드 재정의 특징]

  • 반드시 ★상속 관계★ 에서만 발생함
    (메서드 다중 정의 : 동일한 클래스 내에서 발생)
  • 부모 클래스의 원형 메서드를 자식 클래스에서 재정의(다시 작성)

[메서드 재정의 조건]

  • 반드시 접근 지정자, 리턴타입(반환형), 매개변수 갯수와 자료형 모두 일치해야함
    (메서드 다중 정의(오버로딩) : 매개변수의 갯수가 다르거나, 갯수가 같다면 자료명이 달라야 함)
  • 접근 지정자는 확대 가능 (축소 불가능)





<예시>


Animal 클래스 생성


=============================코드=============================
public class Animal {
	
	void sound() {
		System.out.println("소리를 냅니다!!");
		
	}  // sound() 메서드 end
	
}



Animal 클래스를 상속받을 Dog 클래스 생성


=============================코드=============================
public class Dog extends Animal {
	
	// 메서드 제정의(overriding) : 상속에서만 발생
	
	//void sound() {       // 반환형, 자료형, 매개변수, 매개명 모두 같아야 함!!! 
                           // 안 그러면 자식클래스에서 만든 다른 메서드로 인식!
		
		//System.out.println("멍멍멍!!!");
	//}
	
	
	// 메서드 정의 시 오타가 날 것을 대비 (ctrl + space바)
	@Override
	void sound() {    // public void sound(){ } 도 가능하나 
                      // private void sound(){ } 는 불가능!
		
		System.out.println("멍멍멍!!!");
	}

}



이어서 고양이, 소 클래스도 생성해서 오버라이딩으로 재정의하여 각 동물에 맞는 울음소리가 출력될 수 있게 메서드를 만들자



=============================코드=============================
////////////// Cat 클래스 생성
public class Cat extends Animal {
	
	@Override
	void sound() {
		System.out.println("니야아아오오옹");
	}

}

////////////// Cow 클래스 생성
public class Cow extends Animal {
	
	@Override
	void sound() {
		System.out.println("음멈멈멈머");
	}

}

메인메서드로 받을 Animal_01 클래스 생성


=============================코드=============================

public static void main(String[] args) {
		
		Dog dog = new Dog();
		Cat cat = new Cat();
		Cow cow = new Cow();
		
		dog.sound();
		cat.sound();
		cow.sound();
		
	}

=============================실행=============================





<예시>


Shape 클래스 생성


=============================코드=============================

public class Shape {
	
	void draw() {
		
		System.out.println("그리다!");
	}

}



Shape 클래스를 상속받을 Circle, Rectangle, Line 클래스 생성



=============================코드=============================

////////////// Circle 클래스 생성
public class Circle extends Shape {
	
	@Override
	void draw() {
		System.out.println("동그라미를 그리자!");
	}

}

////////////// Rectangle 클래스 생성
public class Rectangle extends Shape {
	
	@Override
	void draw() {
		System.out.println("삼각형을 그리자!");
	}

}

////////////// Line 클래스 생성
public class Line extends Shape {
	
	@Override
	void draw() {
		System.out.println("선을 그리자!");

	}

}



메인메서드로 받을 Shape_02 클래스 생성


=============================코드=============================

public static void main(String[] args) {
		
		Line line = new Line();
		Circle circle = new Circle();
		Rectangle rectangle = new Rectangle();
		
		line.draw();
		circle.draw();
		rectangle.draw();

	}

=============================실행=============================

0개의 댓글