πμμμ΄λ?
- μλ‘μ΄ ν΄λμ€λ₯Ό μ μ ν λ μ΄λ―Έ ꡬνλ ν΄λμ€λ₯Ό μμ(inheritance) λ°μμ μμ±μ΄λ κΈ°λ₯μ νμ₯νμ¬ ν΄λμ€λ₯Ό ꡬνν¨
- μ΄λ―Έ ꡬνλ ν΄λμ€λ³΄λ€ λ ꡬ체μ μΈ κΈ°λ₯μ κ°μ§ ν΄λμ€λ₯Ό ꡬνν΄μΌ ν λ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμν¨

| μμνλ ν΄λμ€ : μμ ν΄λμ€, parent class, base class, super class |
| μμλ°λ ν΄λμ€ : νμ ν΄λμ€, child class, derived class, subclass |
πμμ λ¬Έλ²
class b extends a{
//aκ° bλ₯Ό μμνλ€
}
πμμμ ꡬννλ κ²½μ°
- μμ ν΄λμ€λ νμ ν΄λμ€ λ³΄λ€ λ μΌλ°μ μΈ κ°λ κ³Ό κΈ°λ₯μ κ°μ§λ€.
- νμ ν΄λμ€λ μμ ν΄λμ€ λ³΄λ€ λ ꡬ체μ μΈ κ°λ κ³Ό κΈ°λ₯μ κ°μ§λ€.
- νμ ν΄λμ€κ° μμ ν΄λμ€μ μμ±κ³Ό κΈ°λ₯μ νμ₯ (extends)νλ€λ μλ―Έμ΄λ€.
πμμ λ‘ λλ¬Όμ μμν΄λμ€λ‘ λκ³ μμ λ°λ λ€λ₯Έν΄λμ€λ₯Ό λ§λ€μ΄λ³΄μ
μμν΄λμ€μΈ λλ¬Ό ν΄λμ€λ₯Ό λ§λ λ€.
|
1
2
3
4
5
6
7
|
public class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
|
cs |
DogλΌλ animalνμν΄λμ€λ₯Ό νλ λ§λ λ€.
|
1
2
3
4
5
6
7
8
9
|
public class Dog extends Animal {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
}
}
|
cs |
μ€νν΄λ³΄λ©΄ "poppy"λΌλ λ¬Έμμ΄μ΄ μΆλ ₯λλ€.
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Dog extends Animal {
public void sleep() {
System.out.println(this.name+" zzz");
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.sleep();
}
}
|
cs |
Dogν΄λμ€μ sleepμ΄λΌλ λ©μλλ₯Ό μΆκ°νμλ€.
μ΄μ Dog ν΄λμ€λ Animal ν΄λμ€λ³΄λ€ μ’ λ λ§μ κΈ°λ₯(sleepλ©μλκ° μΆκ°λμλ€.)μ κ°μ§κ² λμλ€. μ΄λ λ― λ³΄ν΅ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ κΈ°λ₯μ λνμ¬ μ’ λ λ§μ κΈ°λ₯μ κ°λλ‘ μ€κ³νλ€.
πIS-A κ΄κ³
Dogν΄λμ€λ Animalν΄λμ€λ₯Ό μμλ°μλ€. μ¦, Dogλ Animalμ νμ κ°λ μ΄λΌκ³ ν μ μκ² λ€. μ΄λ° κ²½μ° Dogλ Animalμ ν¬ν¨λκΈ° λλ¬Έμ "κ°λ λλ¬Όμ΄λ€"λΌκ³ ννν μ μλ€.
μλ°λ μ΄λ¬ν κ΄κ³λ₯Ό IS-A κ΄κ³λΌκ³ νννλ€. μ¦ "Dog is a Animal" κ³Ό κ°μ΄ λ§ν μ μλ κ΄κ³λ₯Ό IS-A κ΄κ³λΌκ³ νλ€.
κ·Έλ¬λ λΆλͺ¨ ν΄λμ€λ‘ λ§λ€μ΄μ§ κ°μ²΄λ₯Ό μμ ν΄λμ€μ μλ£νμΌλ‘λ μ¬μ©ν μ μλ€.
Dog dog = new Animal();
μ΄λ κ² μ¬μ©νλ©΄ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
πλ©μλ μ€λ²λΌμ΄λ© (Method overriding) ->μμ ν΄λμ€κ° κ°μ§κ³ μλ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μν΄μ μ¬μ©
λ©μλ μ€λ²λΌμ΄λ©μ΄λ?
- μ€λ²λΌμ΄λ©(overriding)μ΄λ μμ κ΄κ³μ μλ λΆλͺ¨ ν΄λμ€μμ μ΄λ―Έ μ μλ λ©μλλ₯Ό μμ ν΄λμ€μμ κ°μ μκ·Έλμ³λ₯Ό κ°λ λ©μλλ‘ λ€μ μ μνλ κ²μ΄λΌκ³ ν μ μλ€.
- μλ°μμ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ₯Ό μ μΈν λͺ¨λ λ©μλλ₯Ό μμλ°λλ€.
- μ΄λ κ² μμλ°μ λ©μλλ κ·Έλλ‘ μ¬μ©ν΄λ λκ³ , νμν λμμ μν΄ μ¬μ μνμ¬ μ¬μ©ν μλ μλ€.
- μ¦, λ©μλ μ€λ²λΌμ΄λ©μ΄λ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νλ κ²μ μλ―Ένλ€.
μ€λ²λΌμ΄λ©μ 쑰건
- μ€λ²λΌμ΄λ©μ΄λ λ©μλμ λμλ§μ μ¬μ μνλ κ²μ΄λ―λ‘, λ©μλμ μ μΈλΆλ κΈ°μ‘΄ λ©μλμ μμ ν κ°μμΌ ν©λλ€.
- νμ§λ§ λ©μλμ λ°ν νμ μ λΆλͺ¨ ν΄λμ€μ λ°ν νμ μΌλ‘ νμ λ³νν μ μλ νμ μ΄λΌλ©΄ λ³κ²½ν μ μμ΅λλ€.
- λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ μ κ·Ό μ μ΄μλ₯Ό λ μ’μ λ²μλ‘ λ³κ²½ν μ μμ΅λλ€
- λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ λ ν° λ²μμ μμΈλ₯Ό μ μΈν μ μμ΅λλ€.
πλ©μλ μ€λ²λ‘λ© (Method overloading) ->κ°μ μ΄λ¦μ λ©μλ μ¬λ¬κ°λ₯Ό κ°μ§λ©΄μ λ§€κ°λ³μμ μ νκ³Ό κ°μκ° λ€λ₯΄λλ‘ νλ κΈ°μ
λ©μλ μ€λ²λ‘λ©μ΄λ ?
- λ©μλ μ€λ²λ‘λ©(overloading)μ΄λ κ°μ μ΄λ¦μ λ©μλλ₯Ό μ€λ³΅νμ¬ μ μνλ κ²μ μλ―Ένλ€.
- μλ°μμλ μλ ν ν΄λμ€ λ΄μ κ°μ μ΄λ¦μ λ©μλλ₯Ό λ μ΄μ κ°μ§ μ μλ€.
- νμ§λ§ λ§€κ°λ³μμ κ°μλ νμ μ λ€λ₯΄κ² νλ©΄, νλμ μ΄λ¦μΌλ‘ λ©μλλ₯Ό μμ±ν μ μλ€.
- μ¦, λ©μλ μ€λ²λ‘λ©μ μλ‘ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°λ μ¬λ¬ λ©μλλ₯Ό κ°μ μ΄λ¦μΌλ‘ μ μνλ κ²μ΄λΌκ³ ν μ μλ€.
- μ΄λ¬ν λ©μλ μ€λ²λ‘λ©μ μ¬μ©ν¨μΌλ‘μ¨ λ©μλμ μ¬μ©λλ μ΄λ¦μ μ μ½ν μ μλ€.
- λν, λ©μλλ₯Ό νΈμΆν λ μ λ¬ν΄μΌ ν λ§€κ°λ³μμ νμ μ΄λ κ°μμ λν΄ ν¬κ² μ κ²½μ μ°μ§ μκ³ νΈμΆν μ μκ² λλ€.
- λ©μλ μ€λ²λ‘λ©μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§ μ€ νλμΈ λ€νμ±(polymorphism)μ ꡬννλ λ°©λ² μ€ νλμ΄λ€.
λ©μλ μ€λ²λ‘λ©μ 쑰건
- λ©μλμ μ΄λ¦μ΄ κ°μμΌ νλ€.
- λ©μλμ μκ·Έλμ², μ¦ λ§€κ°λ³μμ κ°μ λλ νμ μ΄ λ¬λΌμΌ νλ€.
Reference
- http://tcpschool.com/java/java_usingMethod_overloading
- https://wikidocs.net/280
- https://private.tistory.com/25
- http://tcpschool.com/java/java_inheritance_overriding
'Dev > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Code] Refactoring , 리νν λ§ (0) | 2022.02.28 |
|---|---|
| [Design Pattern] λΉλ ν¨ν΄(Builder Pattern) (0) | 2021.12.02 |
| [JAVA]Optionalμ΄λ? (0) | 2021.06.17 |
| [JAVA]μΌνμ°μ°μ(Ternary Operator) (0) | 2021.06.15 |
| [JAVA]Primitive typeκ³Ό Reference type (0) | 2021.04.07 |