자바에는 상속이라는 기능이 있는데 이는 어떤 class의 기능에 추가 기능을 넣고 싶을 때 사용한다.
예를 들어 동물이라는 class를 하나 만들었다고 가정하자.
class Animal {
String name;
int height; // 키
int weight; // 몸무게
...
void setName(String name) {
this.name = name;
}
}
이 Animal 클래스를 부모클래스라 부르긴 하지만 처음에 용어는 중요하지 않다.
동물마다 공통점인 큰 틀을 이 Animal에 넣는다.
이제 울음소리도 추가하고 싶다
근데 울음소리가 있는 얘가 있고 없는 얘가 있다.
이럴 경우 Animal 클래스 안에 짤 것 인가
(물론 지금처럼 하나의 코드를 추가하는 것은 큰 영향을 주지는 않지만 나중에 커다란 프로젝트를 진행하게 되었을 때 울음소리 같은 기능들이 엄청나게 많아질 거고 효율적으로 코드를 짜기 위해서는 부모클래스에 전부 추가하는 것보다는 상속의 기능을 사용하는 것이 더 좋다)
이렇게 공통점이 아닌 부분은 Animal 클래스 안에 추가하기 보다는 상속의 개념을 사용해서 코드를 짜본다
강아지의 울음소리에 대한 클래스를 추가해보자
class Animal {
String name;
int height; // 키
int weight; // 몸무게
...
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void onomatopoeia() { // 울음소리(onomatopoeia) 메소드
System.out.println(name+" 멍멍");
}
}
public class SampleInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.onomatopoeia();
}
}
poppy
poppy 멍멍
이런 출력값을 얻을 수 있다
그럼 이번에는 고양이의 울음소리도 추가해보자
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void onomatopoeia() {
System.out.println(name+" 멍멍");
}
}
class Cat extends Animal {
void onomatopoeia() {
System.out.println(name+" 야옹");
}
}
public class SampleInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.onomatopoeia();
Cat cat = new Cat();
cat.setName("kitten");
System.out.println(cat.name);
cat.onomatopoeia();
}
}
poppy
poppy 멍멍
kitten
kitten 야옹
Dog클래스랑 Cat클래스가 거의 겹치는 것 같은데 이를 합칠 순 없을까
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Onomatopoeia extends Animal {
String sound;
void setSound(String sound) {
this.sound = sound;
}
void show() {
System.out.println(name + "'s sound : " + sound);
}
}
public class SampleInheritance {
public static void main(String[] args) {
Onomatopoeia dog = new Onomatopoeia();
dog.setName("poppy");
dog.setSound("멍멍");
dog.show();
Onomatopoeia cat = new Onomatopoeia();
cat.setName("kitten");
cat.setSound("야옹");
cat.show();
}
}
poppy's sound : 멍멍
kitten's sound : 야옹