[Java] 상속
- Language/JAVA
- 2024. 6. 23.
상속
일상속에서의 상속이란, 부모의 것을 물려받는다라는 의미를 지녔습니다.
그러면 JAVA 프로그래밍 속에서의 상속이란 무엇일까요?
사진처럼 고양이와 강아지가 있습니다.
두 마리의 동물은 서로 다른 개성으로 가진 동물로 유명합니다.
그러나 이 둘의 공통점이 존재합니다.
그것은 이 두 마리는 동물이라는 점 입니다.
그럼 저희는 이를 동물Class로 생성하게 됩니다.
class 동물 {
String name;
public void print() {
System.out.println("울음 소리");
}
}
그런데, 동물 Class는 고양이와 강아지라는 것을 정의할 수는 있으나 이를 강아지class와 고양이class라고 정의하기는 어렵습니다. 왜냐하면, 어디까지나 동물class를 빌려 쓴 고양이와 강아지이기 때문입니다.
그러면 상속은 무엇일까?
//강아지 class 생성, 동물 class 상속
public 강아지 extends 동물 {
}
//고양이 class 생성, 동물class 상속
public 고양이 extends 동물 {
}
class 강아지와 고양이가 만들어졌습니다.
이번에는 위의 설명과는 반대로 고양이와 강아지 class라고 할 수 있습니다.
그런데 여기에는 아무런 필드값이 존재하지 않습니다.
하지만, 동물class를 상속 받고 있기 때문에 아무것도 없지만 고양이 class와 강아지 class는 동물class의 필드와 메소드를 사용할 수 있습니다.
package campus.ch11;
class Animal {
public void print() {
System.out.println("This is an animal");
}
}
class Dog extends Animal {
public void cry() {
System.out.println("This is a dog");
}
}
class Cat extends Animal {
public void cry() {
System.out.println("This is a cat");
}
}
class MainClass02 {
public static void main(String[] args) {
Dog myDog = new Dog();
Cat myCat = new Cat();
myDog.print();
myDog.cry();
myCat.print();
myCat.cry();
}
}
[ 출력 결과 ]
This is an animal
This is a dog
This is an animal
This is a cat
해당 코드는 Cat class와 Dog class에는 print() 함수가 없는 것을 확인 할 수 있습니다.
그러나 dog class와 cat class에는 상속을 무난히 사용할 수 있는 것을 확인 할 수 있습니다.
위 행위가 가능한 이유는 Animal class를 상속하고 있기 때문에 가능한 모습입니다.
Ansimal class를 상속한 Dog class와 Cat class는 Animal의 print()를 그대로 사용할 수 있습니다.
이제 우리는 이를 Animal class를 부모 class,
@Override
위의 설명의 연장입니다.
그러면, 만약 상속 받은 class는 부모 class의 method를 변경할 수 없을까?
✔️ 이를 가능하게 만든 것이 Override 입니다.
이를 가능하게 만든 것이 Override 입니다.
//Animal class 부모
class Animal {
public void print() {
System.out.println("This is an animal");
}
}
//Cat class 자식
class Cat extends Animal {
public void cry() {
System.out.println("This is a cat");
}
@Override
public void print() {
System.out.println("This is Cat");
}
}
//Main Class
class MainClass02 {
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.print();
myCat.cry();
}
}
위의 message와 다르게, print() 코드의 호출 부분이 This is cat인 것을 확인할 수 있습니다.
이를 가능하게 된 것이 부모의 print() 부분을 상속 받았지만, 자식이 부모에게 물려받은 method를 변경했기 때문에 가능한 일 입니다.
이렇게 부모class의 method를 자식class에서 method를 변경해서 사용하는 것을 Override라고 정의를 짓습니다.
상속의 장점
1. 코드 재사용
✔️ 이미 작성된 클래스의 기능을 확장하여 새로운 클래스를 쉽게 만들 수 있습니다.
2. 유지보수의 용이성
✔️ 공통 기능을 부모 클래스에 두면, 수정이 필요할 때 한 곳만 수정하면 자식 클래스에도 반영이 됩니다.
3. 다형성 구현
✔️ 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조하게 하여, 다양한 타입의 객체를 동일한 방식으로 처리할 수 있게 됩니다.
'Language > JAVA' 카테고리의 다른 글
[JAVA] 디자인패턴 - 싱글턴 (0) | 2024.09.02 |
---|---|
[Java] 중첩 클레스 알아보기 (1) | 2024.07.03 |
[Java] Java 설치하기 (0) | 2024.04.29 |
[Java] 문자열 관리하기 (1) | 2023.11.23 |
[Java] 데이터 타입 (1) | 2023.11.23 |