메서드 오버라이드
Method Override
부모클래스의 메서드를 자식클래스에서 재정의 하는 것이다.
💀 문법 주의
부모클래스의 메서드 이름과 매개변수 개수 및 타입
즉, 모양이 동일해야 한다.
한편 xxx.java 파일 하나에
여러 클래스를 선언할 수 있다.
단 스코프는 분명히 구분된다.
또한 단 하나의 자바파일에
public 클래스는 오직 하나만 존재할 수 있다.
package com.inheritance;
/**
* 4.21 2강 상속개념 5
*
*선임이 작성한 코드라고 가정한다
*/
public class Cal {
//메서드를 만들어보자
public int sum(int n1, int n2) {
return n1 + n2;
}
public int multiply(int n1, int n2) {
return n1 * n2;
}
}//end of Cal
/**
* xxx.java 파일 하나에
* 여러 클래스를 선언할 수 있다.
* 단 스코프는 분명히 구분된다.
*
* 또한 단 하나의 자바파일에
* public 클래스는 오직 하나만 존재할 수 있다.
*
* 요청사항
* 마이너스 기능을 추가하라
* 곱하기 기능에서 n1과 n2에 0이 들어온다면
* 0을 입력하지 말라는 문구를 추가하라
*/
class ChildCal extends Cal { //자식 클래스는 접근제어코드 public을 붙일 수 없다
//마이너스 기능 추가
public int minus(int n1, int n2) {
return n1 - n2;
}
/*
상속을 사용했을때
메서드 오버라이드라는 개념이 있다.
Method Override
부모클래스의 메서드를 재정의 하는 것이다.
문법
부모클래스의 메서드 이름과 매개변수 개수 및 타입
즉, 모양이 동일해야 한다.
*/
//곱셈 기능 수정
public int multiply(int n1, int n2) {
if (n1 == 0 || n2 == 0) {
System.out.println("0을 입력하지 마시오");
}
return n1 * n2;
}
/*
부모 클래스의 메서드를 자식 클래스에서 수정했다면
메서드 오버라이드라고 한다.
*/
}//end of ChildCal
예제
부모클래스 Hero 클래스를
자식클래스인 Warrior, Archer, Wizarad로 상속시켰다.
package com.inheritance;
/**
* 4.21 상속개념 6
* 클래스 다이어그램 준수해야 한다.
*/
public class Hero {
// 클래스 속성
String name;
int hp;
//생성자
Hero(String name, int hp) {
this.name = name;
this.hp = hp;
}
//메서드
void attack() {
System.out.println("대상을 공격합니다");
}
}//end of class
💀 문법 주의
부모 사용자정의생성자가 기존재한다면
super(); 키워드를 생성하여
부모 생성자를 호출하여야 한다.
package com.inheritance;
/**
* 4.21 상속개념 6_1
* 클래스 다이어그램 준수해야 한다.
*/
public class Warrior extends Hero{
Warrior(String name, int hp) {
/*
this();
부모 사용자정의생성자가 기존재한다면
super(); 키워드를 생성하여
부모 생성자를 호출하여야 한다.
*/
super(name, hp);
}
//메서드
void comboAttack() {
System.out.println("대상에게 comboAttack을 시전합니다");
}
//메서드 오버라이드
//어노테이션 주석 + 힌트
@Override
void attack() {
System.out.println("전사가 공격을 합니다");
super.attack();
}
//
}//end of class
package com.inheritance;
/**
* 4.21 상속개념 6_2
* 클래스 다이어그램 준수해야 한다.
*/
public class Archer extends Hero {
Archer(String name, int hp) {
super(name, hp);
}
//메서드
void fireArrow() {
System.out.println("대상에게 fireArrow를 시전합니다");
}
}//end of class
package com.inheritance;
/**
* 4.21 상속개념 6_3
* 클래스 다이어그램 준수해야 한다.
*/
public class Wizard extends Hero {
Wizard(String name, int hp) {
super(name, hp);
}
//메서드
void freezing() {
System.out.println("대상에게 freezing을 시전합니다");
}
}//end of class
'Java' 카테고리의 다른 글
포함관계 Composition, 상속과는 다르다. (1) | 2025.04.21 |
---|---|
상속과 메서드 오버라이드를 통한 쇼핑몰 회원정보 수정 (0) | 2025.04.21 |
클래스의 상속 Inheritance, 기존 클래스 속성과 기능을 이어받다 (0) | 2025.04.21 |
메서드 오버로딩 Method Overloading, 자바의 편리한 기능 (0) | 2025.04.21 |
실수) sysout 안에 sysout을 넣어 발생한 오류 (0) | 2025.04.18 |