자바에는 상속(Inheritance)이 존재합니다.
상속 관계에서는 상위 클래스와 하위 클래스가 있습니다. 하위 클래스는 상위 클래스를 상속하여 그 부모의 멤버-필드와 메서드-를 받아 사용할 수 있습니다.
예를 들어 아래와 같이 사용할 수 있습니다.
class SuperClass {
int age;
int height;
String name;
Sex sex;
sc.eat("사랑스러운 소고기");
}
class SubClass extends SuperClass{
public SubClass() {
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
SubClass sc = new SubClass();
sc.age = 20;
sc.height = 180;
sc.name = "John";
sc.sex = Sex.MALE;
}
}
서브 클래스 타입의 객체를 생성하면서 필드를 넣어줄 수는 없을까요 ??
class SuperClass {
public SuperClass(int age, int height, String name, Sex sex) {
this.age = age;
this.height = height;
this.name = name;
this.sex = sex;
}
int age;
int height;
String name;
Sex sex;
void eat(String food) {
System.out.println(food + "를 먹었다.");
}
}
class SubClass extends SuperClass{
public SubClass(int age, int height, String name, Sex sex) {
super(age, height, name, sex);
}
}
1. 상위 클래스에서 필요로 하는 `필드를 매개변수로 갖는 생성자`를 만들어줘야 합니다.
2. 하위 클래스에서 `super` 키워드를 사용합니다.
** 이때 super 키워드가 생성자의 최상단에 위치하게 합니다. **
상위 클래스 객체가 먼저 생성된 후, 하위 클래스 객체가 생성되기 때문입니다.
근본적인 물음 : 상속은 왜 하는 건데 ?
SuperClass 를 Human 이라고 바꾸고, 그 아래 SubClass 를 두 개 두어서 남성과 여성을 나타내는 class를 만들었습니다. 이런 식으로 상속의 강력함을 확인하실 수 있습니다.
public class Main {
public static void main(String[] args) throws InterruptedException {
Male male = new Male(20, 180, "John");
Female female = new Female(19, 165, "Anna");
male.eat("어머니가 싫다고 하신 짜장면");
System.out.println(male.sex);
female.eat("탕수육");
System.out.println(female.sex);
}
}
class Human {
public Human(int age, int height, String name) {
this.age = age;
this.height = height;
this.name = name;
}
int age;
int height;
String name;
void eat(String food) {
System.out.println(food + "를 먹었다.");
}
}
class Male extends SuperClass{
Sex sex = Sex.MALE;
public Male(int age, int height, String name) {
super(age, height, name);
}
}
class Female extends SuperClass{
Sex sex = Sex.FEMALE;
public Female(int age, int height, String name) {
super(age, height, name);
}
}
남성과 여성의 공통된 특징은 Human 클래스의 멤버로 두고, 차이점을 각각의 클래스의 멤버로 둔다면 확장성 및 유지보수성 모두 챙길 수 있습니다.

'Java > Java 문법' 카테고리의 다른 글
캡상추다 - 다형성(같은 이름의 다양한 형태) (0) | 2024.10.13 |
---|---|
정규 표현식(Regular Expression) (2) | 2024.10.12 |
Enum (1) | 2024.10.10 |
Java) 캡상추다 - 상속(재사용+확장) feat.인터페이스 (1) | 2024.10.06 |
Java) 변수 선언, 저장 및 메모리 영역 (3) | 2024.10.05 |