728x90
반응형
[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 |
