Dev/Java

[Java ๊ธฐ์ดˆ] 11. ์ƒ์†(Ingeritance)

KeyDi 2023. 3. 20. 13:05
728x90

๐Ÿ‘€์œ ์šฉํ•œ ์ •๋ณด

Java ๊ฐ€๋ณ€ ์ธ์ˆ˜

public class Main {
    public void something(int... nums) {
        int i = nums[0];
    }
}

Eclipse ๋‹จ์ถ•ํ‚ค

  • Ctrl + D : ํ•œ ์ค„ ์ง€์šฐ๊ธฐ
  • Ctrl + Alt + โ†“ : ์ค„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ

๐Ÿ’ก10์žฅ ํ”ผ๋“œ๋ฐฑ Tip

๐Ÿ’ก
ํด๋ž˜์Šค ๋‚ด field์— ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” private ์ •์˜ํ•œ ๋ฉ”์†Œ๋“œ๋Š” public


๐Ÿ“˜ 11์žฅ ์ƒ์† (Inheritance)

๐Ÿ’ก
์ด์ „์— ๋งŒ๋“  ํด๋ž˜์Šค์™€ ๋‹ฎ์•˜์ง€๋งŒ, ์ผ๋ถ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ƒ์†์„ ํ•˜๋Š” ์ด์œ 

๐Ÿ’ก
์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override)ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ์†์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ธ์šฐ๊ธฐ์™€ ๋„๋ง๋งŒ ๊ฐ€๋Šฅํ•œ Hero ํด๋ž˜์Šค

fly(), land()๊ฐ€ ๊ฐ€๋Šฅํ•œ SuperHero ํด๋ž˜์Šค

์œ„ ์ฝ”๋“œ์˜ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฌธ์ œ์ 

  • ์ถ”๊ฐ€, ์ˆ˜์ •์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ
  • ์†Œ์Šค์˜ ํŒŒ์•…์ด๋‚˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ ์ง„๋‹ค.
๐Ÿ’ก
์ƒ์†์„ ํ†ตํ•ด ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ SuperHero

๐Ÿ’ก
SuperHero๋Š” Hero๋ฅผ ์ƒ์†(ํ™•์žฅ)ํ•จ์œผ๋กœ, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์†๊ด€๊ณ„์˜ ํ‘œํ˜„ (ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ)

Java์—์„œ ๋‹ค์ค‘์ƒ์† ๊ธˆ์ง€

๋‹ค์ค‘ ์ƒ์†์˜ ๋ฌธ์ œ์ 

๐Ÿ’ก
๋‹ค์ค‘ ์ƒ์†์ด๋ž€, ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์ค‘ ์ƒ์†์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ(diamond problem)์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€ ๋ชจํ˜ธํ•ด์ง€๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ž˜์Šค A์™€ B๊ฐ€ ํด๋ž˜์Šค C๋ฅผ ์ƒ์†ํ•˜๊ณ , ํด๋ž˜์Šค D๊ฐ€ A์™€ B๋ฅผ ์ƒ์†ํ•˜๋Š” ๊ฒฝ์šฐ, ๋งŒ์•ฝ A์™€ B๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด, D๋Š” ์ด๋ฅผ ์ƒ์†๋ฐ›๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก
๋Œ€์‹  ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์ƒ์†๊ณผ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋“œ (Override) - ์žฌ์ •์˜

๐Ÿ’ก
์ƒ์† ๋ฐ›์€ SuperHero์—์„œ run() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override) ํ–ˆ๋‹ค.

์ƒ์†, ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ธˆ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• (final)

๐Ÿ’ก
final class๋ฅผ ํ†ตํ•ด ์ƒ์†์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์†Œ๋“œ์— final ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด, ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. String ํด๋ž˜์Šค๋Š” final๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ƒ์†์ด ๊ธˆ์ง€๋˜์–ด ์žˆ๋‹ค.

super()

๐Ÿ’ก
super()๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.
๐Ÿ’ก
์ž์‹ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์ž๋™์œผ๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ์ด๋•Œ super()๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค!
class Parent {
    private int num;

    public Parent(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }
}
/////////////////////////////////////////////////////
class Child extends Parent {
    private String name;

    public Child(int num, String name) {
        super(num); // Parent ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// ์‚ฌ์šฉ ์˜ˆ์‹œ
Child child = new Child(10, "Alice");
System.out.println(child.getNum()); // 10
System.out.println(child.getName()); // "Alice"

์ƒ์†๊ณผ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ˆœ์„œ

๐Ÿ’ก
๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋œ ์ดํ›„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†์„ ๋•Œ์˜ ์˜ค๋ฅ˜

๐Ÿ’ก
์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋Š” ์Šˆํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ์ƒ์† ๋ฐฉ๋ฒ•

๐Ÿ’ก
Is-a ์›์น™ ๋”ฐ๋ฅด๊ธฐ โ†’ SuperHero is a Hero (์Šˆํผํžˆ์–ด๋กœ๋Š” ํžˆ์–ด๋กœ์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค.)

์ž˜๋ชป๋œ ์ƒ์†

๐Ÿ’ก
๊ฐœ๋…์ ์œผ๋กœ Is-a ๊ด€๊ณ„๊ฐ€ ๋˜์ง€ ๋ชป ํ•จ์—๋„ ์ƒ์†์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ์ƒ์†์ด๋‹ค. - ํ˜„์‹ค์„ธ๊ณ„์™€ ๋ชจ์ˆœ ๋ฐœ์ƒ - ๋‹คํ˜•์„ฑ์„ ์ด์šฉ ๋ถˆ๊ฐ€
  1. ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์ƒํƒœ๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ์˜์กด์„ฑ ์ฆ๊ฐ€: ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๊ฐ•ํ•˜๊ฒŒ ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์ž์‹ ํด๋ž˜์Šค์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ์œ ์—ฐ์„ฑ ๊ฐ์†Œ: ์ƒ์†์€ ํด๋ž˜์Šค์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๊ณ„์ธต ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ณ ์ •์‹œํ‚ค๋ฏ€๋กœ, ์œ ์—ฐ์„ฑ์ด ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ํด๋ž˜์Šค ๋กœ๋”ฉ ๋ฌธ์ œ: ์ž๋ฐ”์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ๋กœ๋”ฉ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์ฒดํ™”์™€ ์ผ๋ฐ˜ํ™”์˜ ๊ด€๊ณ„

๐Ÿ’ก
(Sub Class)์ž์‹ ํด๋ž˜์Šค์ผ ์ˆ˜๋ก ๋” ๊ตฌ์ฒดํ™”๋˜๊ณ , (Super Class)๋ถ€๋ชจ ํด๋ž˜์Šค์ผ ์ˆ˜๋ก ์ถ”์ƒ์ ์ธ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜ํ™” ๋œ๋‹ค.

11์žฅ ์ •๋ฆฌ

์ƒ์†์˜ ๊ธฐ์ดˆ

  • extends ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ดˆ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ •์˜ ๊ฐ€๋Šฅ (์ƒ์†)
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋Š” ์ž๋™์ ์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค์— ์ƒ์† โ†’ ์ž์‹ ํด๋ž˜์Šค์—๋Š” ์ถ”๊ฐ€ ๋œ ๋ถ€๋ถ„๋งŒ ๊ธฐ์ˆ  ํ•˜๋ฉด ๋œ๋‹ค
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ž‘์„ฑ ํ•  ๊ฒฝ์šฐ ์ด๊ฒƒ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค
  • final ์„ ๋ถ™์ธ ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๋˜์ง€ ์•Š๊ณ , final ์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜์ง€ ์•Š๋Š”๋‹ค
  • ์˜ฌ๋ฐ”๋ฅธ ์ƒ์†์ด๋ž€ โ€œ์ž์‹ ํด๋ž˜์Šค is-a ๋ถ€๋ชจ ํด๋ž˜์Šค"
  • ์ƒ์†์—๋Š” โ€œ์ถ”์ƒ์ , ๊ตฌ์ฒด์ " ๊ด€๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ •์˜ํ•˜๋Š” ์—ญํ• ๋„ ์žˆ์Œ

์ธ์Šคํ„ด์Šค

  • ์ธ์Šคํ„ด์Šค๋Š” ๋‚ด๋ถ€์— ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋‹ค์ค‘๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค
  • ๋ณด๋‹ค ์™ธ์ธก์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค
  • ์™ธ์ธก์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” super ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์ธก ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„์— ์ ๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

์ƒ์„ฑ์ž ๋™์ž‘

  • ๋‹ค์ค‘๊ตฌ์กฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, JVM ๋Š” ์ž๋™์ ์œผ๋กœ ๊ฐ€์žฅ ์™ธ์ธก ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ
  • ๋ชจ๋“  ์ƒ์„ฑ์ž๋Š”, โ€œ๋ถ€๋ชจ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž"๋ฅผ ํ˜ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค
  • ์ƒ์„ฑ์ž์˜ ์„ ๋‘์— super() ๊ฐ€ ์—†์œผ๋ฉด, ์•”๋ฌต์ ์ธ โ€œsuper();โ€ ๊ฐ€ ์ถ”๊ฐ€ ๋จ


๐Ÿ“์—ฐ์Šต ๋ฌธ์ œ

11-1

๐Ÿ’ก
2, 3, 5

11-2

๐Ÿ’ก
(1) ๋ถ€๋ชจ : ์ „์ž ๊ธฐ๊ธฐ, ์ž์‹ : ์•„์ดํฐ (2) ๋ถ€๋ชจ : ๊ตํ†ต ์ˆ˜๋‹จ, ์ž์‹ : ํ˜„๋Œ€์ฐจ (3) ๋ถ€๋ชจ : ์ฑ…, ์ž์‹ : ์˜์–ด ์‚ฌ์ „

11-3

  • ๋… ๊ณต๊ฒฉ์˜ ๋‚จ์€ ํšŸ์ˆ˜๋Š” getter setter ์•ˆ ๋งŒ๋“ค์–ด๋„ ๋จ. (๋‚ด๋ถ€์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ)

package Exam;

public class Kinoko {
    int hp = 50;
    private char suffix;
    
    public Kinoko(char suffix) {
        this.suffix = suffix;
    }

    void attack(Hero hero) {
        System.out.println("ํ‚ค๋…ธ์ฝ” " + this.suffix + " ์˜ ๊ณต๊ฒฉ");
        System.out.println("10์˜ ๋ฐ๋ฏธ์ง€");
        hero.setHp(hero.getHp() - 10);
    }
}
package Exam;

public class PoisonKinoko extends Kinoko{
    private int poisonCount;
    
    public PoisonKinoko(char suffix) {
        super(suffix);
        poisonCount = 5;
    }
    
    @Override
    void attack(Hero hero) {
        super.attack(hero);
        if(poisonCount != 0) {
            System.out.println("์ถ”๊ฐ€๋กœ, ๋… ํฌ์ž๋ฅผ ์‚ดํฌํ–ˆ๋‹ค!");
            int damage = (int) (hero.getHp() * 0.2);
            hero.setHp(hero.getHp() - damage);
            System.out.println(damage + "ํฌ์ธํŠธ์˜ ๋ฐ๋ฏธ์ง€");
            poisonCount--;
        } else {
            System.out.println("๋…์„ ์“ฐ์ง„ ๋ชปํ–ˆ๋‹ค.");
        }
    }
}
package Exam;

public class Hero {
    private String name;
    private int hp;

    public Hero(String name, int hp) {
        this.name = name;
        this.hp = hp;
    }

    public int getHp() {
        return hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }
    
    public String getName() {
        return name;
    }
}
package Exam;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Kinoko kinoko = new Kinoko('A');
        PoisonKinoko poisonKinoko = new PoisonKinoko('B');
        Hero hero = new Hero("์šฉ์‚ฌ1", 100);
        
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
        System.out.println("-------------------------------------------");
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
        System.out.println("-------------------------------------------");
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
        System.out.println("-------------------------------------------");
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
        System.out.println("-------------------------------------------");
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
        System.out.println("-------------------------------------------");
        poisonKinoko.attack(hero);
        System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());

    }
}


๐Ÿ’ก
๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๊ด€๋ จ๋œ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ์ž ์ฝ”๋“œ์— ์ ๋Š”๊ฒŒ ์ข‹๋‹ค!
๐Ÿ’ก
์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด Java์˜ Annotation @override ๋ช…์‹œ๋ฅผ ์ž˜ํ•˜์ž!


Uploaded by N2T

728x90
๋ฐ˜์‘ํ˜•