[JAVA] JAVA 기초 | static, 상속 (extends) | 예제 문제 ⭕️

2025. 8. 5. 17:31·✏️공부/💡JAVA
728x90
반응형
더보기

노션 페이지 입니다.

https://www.notion.so/JAVA-24674fb5c2e880bab198fd095ea81f8e?source=copy_link

[Day] 08.05
[Chapter] ~ 41강 / 문제 6


📌 static

  • class에 고정
  • 객체가 접근할 수 있지만 class에 하나만 존재 ➡️ 공유 자원 ⭕️

 

[ 경우 1️⃣ ] String name을 인스턴스 변수로 만들면

각각의 객체가 하나씩 변수를 가짐

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();

        p1.age = 20;
        p1.name = "홍길동";

        p2.age = 30;
        p2.name = "이순신";

        System.out.println(p1.name);
        System.out.println(p2.name);
    }
}

class Person {
    int age;
    String name; 
}

출력 : 홍길동, 이순신

 

[ 경우 2️⃣ ] String name을 스태틱 변수로 만들면

각각의 객체에 name 변수가 존재하지 ❌ 오직 클래스가 변수 가짐 ⭕️

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();

        p1.age = 20;
        p1.name = "홍길동";

        p2.age = 30;
        p2.name = "이순신";

        System.out.println(p1.name);
        System.out.println(p2.name);
    }
}

class Person {
    int age;
    static String name;  // 한개만 존재하는 객체들이 공유하는 변수
}

출력: 이순신, 이순신


[ 번외 ]

변수와 메서드에 static 붙이는게 편할 때 ⭕️

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();

        p1.age = 20;
        p2.age = 30;

        p1.introduce(); 
        p2.introduce(); 

        p1.printHumanAvgAge(); 
        p2.printHumanAvgAge(); 

        Person.humanAvgAge = 50; // static은 class를 통해 바로 접근 가능

    }
}

class Person {
    int age;
    static int humanAvgAge = 40;
    void introduce() {
        System.out.println("제 나이는 " + this.age + "살 입니다.");
    }

    void printHumanAvgAge() {
        System.out.println("인류 평균 나이는 " + humanAvgAge + "살 입니다.");
    }
}

 

 


📌 상속 (extends)

기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받아 사용하는 기능
➡️ 즉, "기존 코드를 재사용하면서 새로운 기능을 덧붙이는 것”

 

✅ 상속의 핵심 목적

  • 코드 재사용
  • 구조적 설계
  • 기능 확장 및 수정 용이

 

📍 상속을 사용 한 경우 - 중복이 없거나 적다

public class Main {
    public static void main(String[] args) {
        System.out.println("== 흰 고양이 ==");
        흰고양이 a = new 흰고양이();
        a.숨쉬다();
        a.야옹();
        a.목숨을_늘린다();

        System.out.println("== 검은 고양이 ==");
        검은고양이 b = new 검은고양이();
        b.숨쉬다();
        b.야옹();
        b.미래를_예지하다();

        System.out.println("== 붉은 고양이 ==");
        붉은고양이 c = new 붉은고양이();
        c.숨쉬다();
        c.야옹();
        c.빠르게_이동();
    }
}

class 고양이 {
    void 숨쉬다() {
        System.out.println("숨쉬다!!");
    }

    void 야옹() {
        System.out.println("야옹");
    }

    void 뛰어넘다() {
        System.out.println("뛰어넘다");
    }
}

class 검은고양이 extends 고양이 {
    void 미래를_예지하다() {
        System.out.println("미래를_예지하다");
    }
}
//
class 흰고양이 extends 고양이 {
    void 목숨을_늘린다() {
        System.out.println("목숨을_늘린다");
    }
}

class 붉은고양이 extends 고양이 { // 고양이라는 사실을 알게 해준다.
    void 빠르게_이동() {
        System.out.println("빠르게_이동");
    }
}

 


🔍 상속 예제 문제

오버라이딩 : 부모 클래스의 메서드를 자식 클래스에서 재정의

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
- D3 완료 : 상속을 사용해서 처리
- D4 요구 : 게임의 재미를 위하여 고무오리를 추가하고 날게 하시오.
- D4 완료 : 클래스와 메서드를 만들어서 처리
- D5 요구 : 주말 주주회의에서 고무오리가 하늘을 날아다니는 것에 대해서 태클이 들어왔습니다. 고무오리 계열은 하늘을 날 수 없게 해주세요.
- D5 완료 : 메서드 오버라이드를 사용해서 처리
- D6 요구 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
- D6 완료 : 고무2오리를 추가
- D7 요구 : 고무오리계열에서 날다 메서드의 중복을 제거해주세요.
*/

public class Main {
    public static void main(String[] args) {
        청둥오리 a청둥오리 = new 청둥오리();
        a청둥오리.날다();
        // 출력 : 오리가 날개로 날아갑니다.

        흰오리 a흰오리 = new 흰오리();
        a흰오리.날다();
        // 출력 : 오리가 날개로 날아갑니다.

        고무오리 a고무오리 = new 고무오리();
        a고무오리.날다();
        // 출력 : 저는 날 수 없어요. ㅜㅠ

        고무2오리 a고무2오리 = new 고무2오리();
        a고무2오리.날다();
        // 출력 : 저는 날 수 없어요. ㅜㅠ
    }
}

class 오리 {
    void 날다() {
        System.out.println("오리가 날개로 날아갑니다.");
    }
}

// 오리 => 부모 클래스
// 흰오리 => 자식 클래스
// 흰오리 extends 오리 => 흰오리가 오리의 능력을 물려 받는다.
// "`흰오리`는 `오리`이다." 라고 자바에게 알려준다.
// `A 는 B 이다.` 테스트에 통과하는 것만 상속이 가능하다.
// 클래스와 객체는 명사이다.
// 메서드는 동사이다.
class 흰오리 extends 오리 {

}

class 청둥오리 extends 오리 {
}

class 고무오리 extends 오리 {
    // 메서드 재정의 라고 합니다.
    // 메서드 오버라이드 라고도 합니다.
    // 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
    void 날다() {
        System.out.println("저는 날 수 없어요. ㅜㅠ");
    }
}

class 고무2오리 extends 고무오리 { }

😂 tip
“자식 이기는 부모 없다”
즉, 자식 클래스의 메소드로 출력

728x90
반응형

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️  (3) 2025.08.06
[JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter  (4) 2025.08.06
[JAVA] JAVA 기초 | 배열, 리스트(ArrayList<>) , 맵(Map<>), 제네릭  (3) 2025.08.04
[JAVA] JAVA 기초 | 클래스, 함수, 전역변수 vs 인스턴스 변수  (0) 2025.08.01
[JAVA] JAVA 기초 | 원시타입 vs 참조타입, 반복문, 조건문 등  (4) 2025.08.01
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️
  • [JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter
  • [JAVA] JAVA 기초 | 배열, 리스트(ArrayList<>) , 맵(Map<>), 제네릭
  • [JAVA] JAVA 기초 | 클래스, 함수, 전역변수 vs 인스턴스 변수
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    GIT
    코딩테스트
    Java
    알고리즘
    자바
    S3
    트랜잭션
    Set
    프로그래머스 #JAVA
    baekjoon
    Stream
    데브코스
    자료구조
    github
    동시성제어
    백엔드
    AWS
    map
    네트워크
    프로그래머스
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] JAVA 기초 | static, 상속 (extends) | 예제 문제 ⭕️
상단으로

티스토리툴바