티스토리 뷰
★ 상속(inheritance) 이란?
- 상속은 무엇인가를 물려받는다는 의미이다.
흔히들, 부모가 자식에게 물려주는 재산을 상속이라고 한다.
부모에게 재산을 상속받으면 상속받은 재산을 자신의 것으로 사용할 수 있다.


이 둘을 생각하면 될 것 같다. 상속자들.. 부러운 것들.. 사탄들의 학교에 루시퍼의 등장이라...
각설하고, 다시 진지한 자세로 객체지향프로그램에 대입하면
B클래스가 A 클래스를 상속받으면 B클래스는 A클래스의 멤버 변수와 메서드를 이용할 수 있다.
김탄이 자기 집안의 유산을 상속받으면 김탄은 자기 집안의 재산을 모두 가질 수 있듯이 말이다.
상속의 장점은 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연해진다.
★ 상속 / 오버라이딩 이용해보기
- 동물은 어떻게 울지? 라고 하면 "찍찍!" 이라고 출력을 해보겠다.
우선 Animal.java를 만들어보겠다.

1. int 형의 age , String color 필드를 만든다.
이들은 멤버 변수 중에서 인스턴스 변수이다.
2. 기본 생성자를 만든다.
superclass를 이용해 constructor를 만든다.
3. 모든 필드를 매개변수로 받는 생성자를 만든다.

4. setter와 getter 메서드를 만든다.
5. sing이라는 메서드를 만들어 "동물은 어떻게 울지?"를 작성한다.
Mouse라는 클래스를 만들어 보겠다.

extends 예약어를 사용하므로써 Mouse클래스가 Animal클래스에게 상속받았다.
extends는 '연장,확장하다'라는 의미이다.
즉, Animal 클래스가 가지고 있는 속성이나 기능을 추가로 확장하여 Mouse클래스를 구현한다는 뜻이다.
그러면 일반적인 클래스 Animal에서 더 구체적인 클래스 Mouse가 구현된다.
Mouse is an Animal 성립된다.
Mouse은 Animal이다.
Animal 클래스가 가진 특성을 물려받을 수 있다. + 자신만의 특성을 확장할 수도 있다.
※ 특성 : 필드와 메서드
☆ A extends B : class A는 class B의 특성을 '재사용' + '확장'
이 객체들을 호출하기 위해 App.java를 만들어 보겠다.

1. Animal 인스턴스 1개를 생성했다. 그 이름은 바로 anAnimal.
sing 메서드를 이용하여 질문을 던졌다.
출력 화면


Animal 필드와 메서드를 상속받아 setAge, setColor만 입력해도 된다.
만약 Mouse에게만 주소, adrress를 추가해주고 싶다면 Mouse클래스 내부에 입력해주면 된다.

1. private를 이용하여 address를 멤버 변수를 만들었다.
2. 생성자 함수를 만들었다. age와 color는 super 예약어를 이용했다.
address는 Mouse 클래스의 멤버 변수에 해당되기 때문에 this를 사용해도 된다.
3. getter,setter 메서드를 만든다.
☆ super 예약어
- 상위 클래스의 생성자 호출할 때 쓰인다.
age,color 필드는 상위 클래스인 Animal이 가지고 있기 때문에 해당 필드의 초기화는 해당 클래스에 맡긴다.

그림으로 보면 이렇게 Animal.java에서 호출이 된다.
이 단계가 끝나면,

1. jerry 객체를 만들어 age, name, address 입력이 가능하다.
2. 쥐는 "찍찍!" 한다.
오버라이딩 (override)을 이용하여 sing 메서드를 재정의 한다.
App.java 에서는 jerry가 "찍찍!"을 출력할 수 있도록 한다.
출력 화면

결국 jerry라는 쥐는 어떻게 우는지 답이 나온다. 답은 바로 찍찍!
Animal.java
package com.extend;
public class Animal {
// int age, String color 필드
private int age; // 멤버 변수 중에서 인스턴스 변수
private String color; // age와 마찬가지
// 기본 생성자
public Animal() {
super();
}
// 모든 필드를 매개변수로 받는 생성자
public Animal(int age, String color) {
super();
System.out.println("Animal(age, color) 호출");
this.age = age;
this.color = color;
}
// setter, getter
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
// void sing
public void sing() {
System.out.println("동물은 어떻게 울지?");
}
}
Mouse.java
package com.extend;
// A extends B : class A는 class B의 특성을 '재사용' + '확장'
public class Mouse extends Animal{
// Mouse is an Animal 성립.
// Mouse는 Animal이다.
// Animal 클래스가 가진 특성을 물려받을 수 있다. + 자신만의 특성을 확장할 수도 있다.
// 특성 : 필드와 메서드
private String address;
public Mouse(int age, String color, String address) {
// age,color 필드는 상위 클래스인 Animal이 가지고 있기 때문에
// 해당 필드의 초기화는 해당 클래스에게 맡김
super(age, color); // 상의 클래스의 생성자 호출
this.address = address;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
// 상위 클래스의 메서드(sing()) 재정의(Override)
// 자신만의 특성에 맞게
// public void sing() {
// System.out.println("찍찍!");
// }
@Override // 해당 메서드가 overriding 되었다는 것을 의미하는 표기법
public void sing() {
System.out.println("찍찍!");
}
@Override
public String toString() {
return super.getAge() + " " + super.getColor() + " " + address;
}
}
App.java
package com.extend;
public class App {
public static void main(String[] args) {
// Animal 인스턴스 1개 생성
// anAnimal
Animal anAnimal = new Animal();
anAnimal.sing();
// Mouse m = new Mouse();
// m.setAge(10);
// m.setColor("갈색");
Mouse jerry = new Mouse(15, "제리", "뉴욕");
jerry.sing(); // jerry야 울어봐
}
}'차곡차곡 > Java' 카테고리의 다른 글
| [Java] 형 변환과 다형성 (0) | 2022.05.09 |
|---|---|
| [Java] 오버로딩(overloading) / 오버라이딩( overriding) (0) | 2022.05.08 |
| [Java] 오버로딩 (overloading) / 오버라이딩 (overriding) (0) | 2022.05.08 |
| [Java] Static 변수 (0) | 2022.05.08 |
| [Java] Setter , Getter 메서드 (1) - 의미 (0) | 2022.05.07 |
- Total
- Today
- Yesterday
- 리액트 엘리먼트 렌더링하기
- JPQL이란
- 데이터베이스 스키마 자동 생성
- 엘리먼트 렌더링
- 영주 한우
- 풍기역맛집
- 로제 파스타 맛집
- JPA 기본키 매핑 전략
- React
- fragment태그
- 꾸덕꾸덕 파스타 맛집
- JPA
- JPA애플리케이션개발코드
- 온량 서울숲점
- JPA라이브러리
- tick 만들기
- react counter
- DDL 생성 콘솔 출력
- 토마호크 맛집
- intellij 한글 깨짐
- 버튼누르면전구이미지변하기
- 콘솔 창 한글 깨짐
- React를 이용한 Counter 만들기
- 영주역 맛집
- 리액트 이벤트 처리하기
- pip 설치 오류
- 엔티티매니저팩토리
- 커틀렛 맛집
- Counter 만들기
- 영속성 관리
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
