Inheritance
π Inheritance(μμ)
μμμ μ₯μ
β μ€λ³΅λλ μ½λλ₯Ό μ€μ¬μ€λ€.
β ν¨μ¨μ μ΄κ³ , κ°λ°μκ° λ¨μΆ.
β μ μ§λ³΄μ μκ°μ μ΅μν κ°λ₯.
ν΄λμ€ μμ
extends λ€μ λ κ° μ΄μμ λΆλͺ¨ν΄λμ€λ μ¬ μ μλ€.
μ¦, javaμμλ λ¨μΌ μμλ§ κ°λ₯νλ€.
1
μμν΄λμ€ extends λΆλͺ¨ν΄λμ€ {}
μΆκ°μ μΌλ‘ μ‘°μ(λΆλͺ¨)κ° μλ ν΄λμ€λ μλμ μΌλ‘ Object ν΄λμ€λ₯Ό
μμλ°κ² λλλ° μλ΅ν κ²½μ° μ»΄νμΌλ¬μ μν΄ μλμΌλ‘ μμ±λλ€.
μ¦, μμκ³μΈ΅μ μ΅μμμλ Objectν΄λμ€κ° μμΉνλ€κ³ ν΄μν μ μλ€.
λν Object ν΄λμ€μλ 11κ°μ λ©μλκ° μλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// class
public class People extends Object{
// Field
public String name;
public String ssn;
// Constructor
public People(String name; String ssn;) {
this.name = name;
this.ssn = ssn;
}
}
λΆλͺ¨ μμ±μλ μμ μμ±μμ 맨 μμ€μ νΈμΆλλ€.
λ°λ‘ μ μΈν΄μ£Όμ§ μμλ μ»΄νμΌλ¬μ μν΄ κΈ°λ³Έ μμ±μκ° μ μΈλλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
package practice.java;
public class Student extends People {
// Field
int age = age;
// Constructor
public Student(String name; String ssn; int age;) {
super(name, ssn); // λΆλͺ¨ μμ±μ νΈμΆ
this.age = age;
}
}
π Composite(ν¬ν¨)
ν¬ν¨μ΄λ?
ν ν΄λμ€μ λ©€λ²λ³μλ‘ λ€λ₯Έ ν΄λμ€λ₯Ό μ μΈνλ κ²μ΄λ€.
μμ λ¨μμ ν΄λμ€λ₯Ό λ¨Όμ λ§λ€κ³ , μ΄ λ€μ μ‘°ν©ν΄μ νλμ 컀λ€λ
ν΄λμ€λ₯Ό λ§λ λ€. κ°λ₯ν ν λ§μ κ΄κ³λ₯Ό λ§Ίμ΄μ£Όμ΄ μ¬μ¬μ©μ±μ λμ΄κ³
μ½λλ₯Ό κ΄λ¦¬νκΈ° μ½κ² νλ€. ν΄λμ€λ₯Ό μ€κ³ν λ ν¬ν¨κ³Ό μμ μ¬μ΄μμ
ν·κ°λ¦°λ€λ©΄ is-a, has-a λ₯Ό κ°μ§κ³ λ¬Έμ₯μ λ§λ€μ΄ 보면 λλ€.
μλμ°¨μ λ°ν΄λ₯Ό μλ‘ λ€λ©΄
-
is-a : μλμ°¨λ λ°ν΄μ΄λ€.
-
has-a : μλμ°¨λ λ°ν΄λ₯Ό κ°μ§κ³ μλ€.
μ λ λ¬Έμ₯μ€ μλμ λ¬Έμ₯μ΄ λ μμ°μ€λ½λ€.
λ°λΌμ λ°ν΄ν΄λμ€λ μλμ°¨ ν΄λμ€μ ν¬ν¨ λμ΄μΌ νλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Tire ν΄λμ€
class Tire {
String tire;
}
// newCarν΄λμ€ ν¬ν¨
class newCar {
Tire t = new Tire();
String name;
}
public class inheritanceTest {
public static void main(String[] args) {
newCar myCar = new newCar();
myCar.t.tire = "kumho";
myCar.name = "Sonata";
System.out.println(myCar.t.tire);
System.out.println(myCar.name);
}
}
/*
[μΆλ ₯ κ²°κ³Ό]
kumho
Sonata
*/
π Method Override
Method overridingμ΄λ?
μμ λ°μ μ‘°μ(λΆλͺ¨)μ λ©μλλ₯Ό μμ μκ² λ§κ² μ¬μ μ νλ κ².
κ·μΉ
β μ μΈλΆκ° κ°μμΌνλ€. (μ΄λ¦, λ§€κ°λ³μ, 리ν΄νμ )
β μ κ·Όμ μ΄μλ₯Ό μ’μ λ²μλ‘ λ³κ²½ν μ μλ€.
- μ‘°μμ λ©μλκ° protectedλΌλ©΄, λ²μκ° κ°κ±°λ λμ protected, publicμΌλ‘ λ³κ²½ν μ μλ€.
β μ‘°μ(λΆλͺ¨)ν΄λμ€μ λ©μλλ³΄λ€ λ§μ μμ μμΈλ₯Ό μ μΈν μ μλ€.
β @Override λ₯Ό μ μΈν΄μ£Όλ©΄ μ’λ€(νμλ μλλ―)
νμ(μμ)ν΄λμ€μμ μ‘°μ(λΆλͺ¨)ν΄λμ€ λ©μλλ₯Ό μ¬μ μνμ§λ§, μ¬μ μ νκΈ° μ μ
λ©μλ(λΆλͺ¨ν΄λμ€μ λ©μλ)λ₯Ό νΈμΆνκ³ μΆμ λ, μλμ κ°μ΄ μ¬μ©νλ€.
1
super.parentMethod();
μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ μ°¨μ΄
μ€λ²λ‘λ© : κΈ°μ‘΄μ μλ μλ‘μ΄ λ©μλλ₯Ό μ μνλ κ² (new)
μ€λ²λΌμ΄λ© : μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ² (change, modify)
π super
μ°Έμ‘° λ³μ super
μ‘°μμ λ©€λ²μ μμ μ λ©€λ²λ₯Ό ꡬλ³νλλ° μ¬μ©λλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Test {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10; // super.x
}
class Child extends Parent {
int x=20; // this.x
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x="+ super.x);
}
}
/*
[μΆλ ₯κ²°κ³Ό]
20
20
10
*/
super() μμ±μ
μμν΄λμ€μμ μ‘°μν΄λμ€μμ μ μΈλ λ©€λ²λ₯Ό μ΄κΈ°ν νκΈ° μν΄μλ
μ‘°μμ μμ±μ ν΄λμ€λ₯Ό νΈμΆν΄μΌ νλλ° μ΄ λ super() λ₯Ό μ¬μ©νλ€.
1
2
3
4
5
6
7
8
9
10
public class Person {
String name;
String gender;
Person(String name, String gender) {
this.name = name;
this.gender = gender;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Student extends Person {
int age;
String school;
Student(String name, String gender, int age, String school) {
super(name, gender);
this.age = age;
this.school = school;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SuperTest {
public static void main(String[] args) {
Student gilbert = new Student("νκΈΈλ", "λ¨μ", 28, "νκ΅λνκ΅");
System.out.println("μ΄λ¦: " + gilbert.name);
System.out.println("μ±λ³: " + gilbert.gender);
System.out.println("λμ΄: " + gilbert.age);
System.out.println("νκ΅: " + gilbert.school);
}
}
/*
[μΆλ ₯κ²°κ³Ό]
μ΄λ¦: νκΈΈλ
μ±λ³: λ¨μ
λμ΄: 28
νκ΅: νκ΅λνκ΅
*/