Inheritance

기쑴의 클래슀λ₯Ό 재 μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀둜 μž‘μ„±ν•˜λŠ” 것
μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀둜 μž‘μ„±ν•  수 있으며 λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•œ 것이닀.

Java λŠ” ꡬ쑰적으둜 닀쀑 상속이 λΆˆκ°€λŠ₯ ν•˜λ‹€. 각 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œλ§Œ 상속이 κ°€λŠ₯ν•˜μ§€λ§Œ 두 κ°œμ΄μƒμ˜ μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ€ κ°€λŠ₯ν•˜λ‹€.

Covariant 쑰건을 λ§Œμ‘±ν•˜λ©΄ λ¦¬ν„΄νƒ€μž…μ΄ 달라도 상속이 κ°€λŠ₯ν•˜λ‹€.

abstract class Parent {
  Number run() {
    System.out.println("Parent Run");
    return 0;
  }
}

class Child extends Parent {
  Integer run() {
    System.out.println("Child Run");
    return 1;
  }
}

μœ„ μ½”λ“œμ—μ„œλŠ” Number ν΄λž˜μŠ€κ°€ Integer 클래슀의 슈퍼 ν΄λž˜μŠ€μ΄λ‹ˆ κ°€λŠ₯ν•˜λ‹€.
κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

Child Run
1

λ©”μ„œλ“œμ˜ 곡변 λ°˜ν™˜ νƒ€μž…μ΄λž€ κ·Έ λ©”μ„œλ“œκ°€ μ˜€λ²„λΌμ΄λ”© λ λ•Œ 더 쒁은 (narrower) νƒ€μž…μœΌλ‘œ ꡐ체할 수 μžˆλ‹€λŠ” 것이닀.