Item 19. Inheritance
μμμ κ³ λ €ν΄ μ€κ³νκ³ λ¬ΈμννλΌ. κ·Έλ¬μ§ μμλ€λ©΄ μμμ κΈμ§νλΌ
μμμ μνμ±
μμ μμ΄ν μμ λ€λ€λ―μ΄ μμμ μ½λλ₯Ό μ¬μ¬μ©νκΈ° μν΄ μ μ©ν λꡬμ΄μ§λ§, νμ μ΅μ μ΄ μλλ©°, μλͺ» μ¬μ©νκ²λλ©΄ μ€λ₯λ₯Ό λ΄κΈ° μ½κ² λλ€. λλ¬Έμ ν΄λμ€λ₯Ό μ€κ³ν λ μμμ κ³ λ €ν΄μΌνκ³ κ° λ©μλλ§λ€ μ΄λ€ μμΌλ‘ λμν μ§ μμΈνκ² λ¬Έμνν΄μΌ νλ€. λ§μ½ μμμ νκΈ°μ λΆμ μ ν ν΄λμ€λΌλ©΄ μμμ κΈμ§νλ μ‘°μΉλ₯Ό μ·¨ν΄μΌ νλ€.
μμμ κ³ λ €ν μ€κ³μ λ¬Έμν
μμμ κ³ λ €ν μ€κ³μ λ¬Έμνλ₯Ό νκ³ μ νλ€λ©΄ μλμ μ¬νλ€μ μ§ν€λ κ²μ΄ μ’λ€.
1. @implSpecμ ν΅ν λ¬Έμν
μ£Όμμ @implSpec
νκ·Έλ₯Ό μΆκ°νμ¬ Implentation Requirements
λ΄μ©μ λ¬Έμννμ¬ ν΄λΌμ΄μΈνΈμκ² μ 보λ₯Ό μ κ³΅ν΄ μ€ μ μλ€.
2. protectedλ₯Ό μ΄μ©ν λ©μλ 곡κ°
ν΄λμ€μ λ΄λΆ λμ κ³Όμ μ€κ°μ λΌμ΄λ€ μ μλ ν
μ μ μ λ³νμ¬ protected λ©μλ ννλ‘ κ³΅κ°νμ¬ ν° μ΄λ €μ μμ΄ ν¨μ¨μ μΈ νμ ν΄λμ€λ₯Ό λ§λ€ μ μλλ‘ ν μ μλ€.
μ€μ λ‘ java.util.AbstractList
μ removeRange
λ©μλλ protectedλ‘ μ μΈλμ΄ μλ€.
List
ꡬν체λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈλ ν΄λΉ λ©μλμ μ‘΄μ¬λ₯Ό λͺ¨λ₯΄μ§λ§, AbstractList
λ₯Ό μμν νμ ν΄λμ€λ ν΄λΉ λ©μλλ₯Ό μ¬μ©νμ¬ ν¨μ¨μ μΌλ‘ clear
λ©μλλ₯Ό ꡬνν μ μκ² λλ€.
protect
μ κ³΅κ° μ¬λΆλ μ νν μ ν΄μ§ κ²μ μμΌλ©°, νμ ν΄λμ€λ₯Ό λ§λ€μ΄λ³΄κ³ ν
μ€νΈν΄λ³΄λ©΄μ μ μ νμ§ νλ¨ν΄μΌ νλ€.
νμ§λ§ λ§μ λ©μλλ₯Ό λ
ΈμΆνλ©΄ μΊ‘μνκ° μ΄λ €μμ§κ³ , μ κ² λ
ΈμΆνλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€κΈ° μ΄λ €μμ§λ€λ μ μ λͺ
μ¬ν΄μΌ νλ€.
3. μμμ© ν΄λμ€μ μμ±μ
μμμ© ν΄λμ€μ μμ±μλ μ§/κ°μ μ μΌλ‘ μ¬μ μ κ°λ₯ λ©μλλ₯Ό νΈμΆν΄μλ μλλ€. μμΈν μμ λ° μ΄μ λ μλμ μ½λλ₯Ό μ°Έκ³ νμ.
μμ μ½λμμλ System.out.println
μ΄ null
μ μλ¬ μμ΄ μ€νμν€μ§λ§, λ§μ½ λ€λ₯Έ λ©μλλ₯Ό νΈμΆνλ€λ©΄ NullPointerException
μ΄ λ°μνκ² λ μ μλ€.
λλ¬Έμ μμ±μ λ΄λΆμμλ private
, final
, static
κ°μ μ¬μ μ λΆκ°λ₯ν λ©μλλ§ νΈμΆν΄μΌ νλ€.
4. Cloneable, Serializable μΈν°νμ΄μ€
Cloneable
κ³Ό Serializable
μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ μμμ©μΌλ‘ μ€κ³νκΈ°μ μ ν©νμ§ μμΌλ©°, μΌλ°μ μΌλ‘ κΆμ₯νμ§ μλλ€.
Cloneable
μ clone
λ©μλλ₯Ό, Serializable
μ readObject
λ©μλλ₯Ό κ°κ° ꡬνν΄μΌ νκΈ° λλ¬Έμ νμ ν΄λμ€μμλ μ΄λ₯Ό ꡬνν΄μΌ νκΈ° λλ¬Έμ νμ₯μ λΆλ΄μ΄ λ 컀μ§κ² λλ€.
clone
κ³Ό readObject
λ©μλλ μμ±μμ λΉμ·ν ν¨κ³Ό(μλ‘μ΄ μΈμ€ν΄μ€ μμ±)λ₯Ό λ΄κΈ° λλ¬Έμ, λ§μ½ ꡬν ν΄μΌνλ€λ©΄ λ§μ°¬κ°μ§λ‘ μ§/κ°μ μ μΌλ‘ μ¬μ μ κ°λ₯ λ©μλλ₯Ό νΈμΆν΄μλ μλλ€.
5. μμμ© ν΄λμ€μ μ§λ ¬ν
Serializable
μ ꡬνν μμμ© ν΄λμ€κ° readResolve
νΉμ writeReplace
λ©μλλ₯Ό μ μΈνλ κ²½μ° protected
λ‘ μ μΈν΄μΌ νλ€.
(private
μΌλ‘ μ μΈνλ©΄ νμ ν΄λμ€μμλ ν΄λΉ λ©μλλ₯Ό μ¬μ©ν μ μκ² λλ€.)
μμ κΈμ§
μμμ 보μλ―μ΄ μμ κ°λ₯ν ν΄λμ€λ₯Ό μ€κ³νκΈ° μν΄μ λ§μ λ Έλ ₯μ΄ νμνκΈ° λλ¬Έμ μμμ κΈμ§νλ κ²μ΄ λ μ’μ μ μλ€. μμμ κΈμ§νλ λ°©λ²μ μλ λ κ°μ§κ° μλ€.
ν΄λμ€λ₯Ό finalλ‘ μ μΈ
λͺ¨λ μμ±μλ₯Ό private νΉμ package-privateμΌλ‘ μ μΈνκ³ , public μ μ ν©ν°λ¦¬λ₯Ό μ 곡
νμ€μ μΈ λμ
μ¬μ€ λ§μ κ°λ°μλ€μ΄ μ² μ ν μ€κ³ μμμ κ°λ° ν μ μκΈ° λλ¬Έμ, μμ μμΉμ μ§ν€λ κ²μ νμ€μ μΌλ‘ μ΄λ ΅λ€. λλ¬Έμ μλ²½ν μ€κ³κ° μλλλΌλ 무쑰건 μμμ κΈμ§νλ κ²μ΄ μλλΌ ν΄λμ€ λ΄λΆμμ μ¬μ μ κ°λ₯ λ©μλλ₯Ό μ¬μ©νμ§ μκ² λ§λ€κ³ , ν΄λΉ μ¬μ€μ λ¬Έμννλ μ λλ§ νλλΌλ μ€λμμ λ°©μ§ν μ μλ€.
Last updated
Was this helpful?