부모 클래스가 가진 속성과 기능을 자식 클래스가 물려받는 것
단일 상속
만을 지원한다. 즉, 부모는 한 명이어야 한다는 것자식 클래스
라고 부르며, 필드와 메서드를 물려준 클래스는 부모 클래스
라고 부른다.부모 클래스의 생성자는 상속되지 않는다.
부모 클래스로부터 상속 받은 메서드를 자식 클래스에서 다시 정의해서 사용하는 것
//부모 클래스
public class Animal {
public void makeSound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
/////////////////////////////////////////////////////////
public class Cat extends Animal {
@Override // 오버라이딩 문법 체크
public void makeSound() {
System.out.println("야옹~");
}
}
public class Dog extends Animal {
@Override // 오버라이딩 문법 체크
public void makeSound() {
System.out.println("멍멍!");
}
}
/////////////////////////////////////////////////////////
public class Main {
public static void main(String[] args) {
Animal animal1 = new Cat();
animal1.makeSound(); // "야옹~"
Animal animal2 = new Dog();
animal2.makeSound(); // "멍멍!"
}
}
@Override
를 통해 오버라이딩 문법이 잘됐나 잘못되었나 체크package day07.player;
// 상위 클래스 (super class)
// : 공통 속성(field)과 기능(method)을 가진 부모 클래스
public class Player extends Object {
String nickname;
int level;
int hp;
int exp;
// 현재 캐릭터 정보를 출력
public void showStatus() {
System.out.println("\n======= Character's Info ========");
System.out.println("# name: " + this.nickname);
System.out.println("# level: " + this.level);
System.out.println("# hp: " + this.hp);
}
}
super.showStatus();
를 이용해서 그대로 가져올 수 있음!package day07.player;
// 하위 클래스 (sub class)
// : 상위 클래스로부터 공통 필드와 메서드를 내려받은 클래스
public class Warrior extends Player {
int rage; // 분노게이지
public Warrior(String nickname) {
this.nickname = nickname;
this.level = 1;
this.hp = 50;
this.rage = 100;
}
public void dash(Warrior target) {
System.out.printf("DASH 스킬을 사용합니다.");
}
// 오버라이딩: 부모가 물려준 메서드를 고쳐 쓰는 것
// 규칙: 부모가 물려준 형태를 유지할 것 (파라미터, 리턴타입, 이름)
// 접근제한자는 부모보다 more public 할 것!
// -> 부모가 default면 자식은 default, protected, public (더 more public하게)
@Override // 오버라이딩 룰을 지켰는지 검증
public void showStatus() {
super.showStatus();
System.out.println("# rage: " + this.rage);
}
}