코드 그라데이션
Day22. 상속 도입.(21은 문제) 본문
상속
- 일반적으로, 부모가 자식에게 물려주는 것.
- 자식 입장에서는 부모 것을 가져오는 것.
통념상 부모가 자식보다 범위가 크다고 여기고 있지만,
그렇기는 하죠...
자바에서는 자식이 사이즈가 더 크다!!!
상속을 왜 쓰죠?
- 코드 재사용성이 좋아집니다.
- 부모의 것을 받아 쓰고 + 내것 을 추가 할 수 있습니다.(확장)
(상속의 움직이는 단위는 무조건 class) : 일단 현재까지는.
매우 단순한 기본 형태
Class A{ // 부모
}
Class B extends A{ // A클래스 자식
}
상속의 특징
1. 클래스를 체계화 할 수 있다.
2. 확장이 가능하다.
3. 기존 클래스의 기능을 쉽게 변경할 수 있다 => 오버라이딩
상속과 관련한 자바 언어의 특징
* 다중상속을 지원하지 않는다.
* 자바는, 상속 하나 반드시 포함된다.(대왕. Object 클래스)
그림 예시 1.
다중상속은 아니된다.
이해를 돕기 위한 예제
=> 라면 다양하게 끓이기
--> 라면을 가지고 바리에이션을 줘서 다양한 형태로 끓일 수 있음.
package mega.backend_onemore.Day22;
import java.util.Scanner;
class Ramayon{
String ramyon = "라면";
String water = "물";
String onion = "파";
void boilwater() {
System.out.println(water+"을 끓인다.");
}
void cooking() {
System.out.println(ramyon+"과"+onion+"를 넣고 끓여 요리 완성 맛있게 드세요!!!");
}
}
class RiceRamyon extends Ramayon{
String rice = "떡";
void topping() {
System.out.println(rice+"를 넣는다.");
}
}
class CheeseRamyon extends Ramayon{
String cheese = "치즈";
void topping() {
System.out.println(cheese+"를 넣는다.");
}
}
public class ExtendsTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("만들고 싶은 요리를 입력하세요(1.일반라면, 2.떡라면, 3.치즈라면, 99.종료) :");
int s = sc.nextInt();
if(s == 1) {
Ramayon r = new Ramayon();
r.boilwater();
r.cooking();
}
else if(s == 2) {
RiceRamyon r = new RiceRamyon();
r.boilwater();
r.topping();
r.cooking();
}
else if(s == 3) {
CheeseRamyon cr = new CheeseRamyon();
cr.boilwater();
cr.topping();
cr.cooking();
}
else if(s == 99) {
System.out.println("감사합니다.");
break;
}
else {
System.out.println("주문을 다시 하시길 바랍니다.");
}
}
}
}
예제 2.
상속받으면, 부모의 생성자가 먼저 호출이 돼요!
class C{
C(){
System.out.println("C생성");
}
}
class D extends C{
D(){
System.out.println("D생성");
}
}
public class InheritanceTest {
public static void main(String[] args) {
D d = new D();
}
}
is - A 관계
=> 상속 관계를 의미
부모 < 자식
(물려받아서 확장을 시키니까, 이 관계에서는 당연히 자식의 사이즈가 더 크다.
ex.
1. 사람 - 포유류
: "사람은 포유류다" => 가능 (사이즈의 크기가 명확, 포함관계도 명확)
2.엔진 - 자동차 -
: "엔진은 자동차다" => 불가능(단순히 포함되어 있을 뿐, 모든 엔진이 자동차라고 보기에는 무리가 있음)
------------------------------------------------------
728x90
'Java > Mega' 카테고리의 다른 글
Day24. 참조자료형 형변환, 오버라이딩 (0) | 2023.04.17 |
---|---|
Day23. super (1) | 2023.04.17 |
Day20. 오버로딩과 접근제한자 (1) | 2023.04.17 |
클래스배열 초기화(생성자에서) 예시 (0) | 2023.04.09 |
Day16. HasTest 보충 (0) | 2023.04.09 |
Comments