# μμ(inheritance)
written by sohyeon, hyemin π‘
# 1.μμμ μ μμ μ₯μ
μμμ΄λ, κΈ°μ‘΄μ ν΄λμ€λ₯Ό μ¬μ¬μ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²μ΄λ€.
μμμ ν΅ν΄μ ν΄λμ€λ₯Ό μμ±νλ©΄ λ³΄λ€ μ μ μμ μ½λλ‘ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν μ μκ³ μ½λλ₯Ό 곡ν΅μ μΌλ‘ κ΄λ¦¬ν μ μκΈ° λλ¬Έμ μ½λμ μΆκ° λ° λ³κ²½μ΄ λ§€μ° μ©μ΄νλ€.
- μ‘°μ ν΄λμ€ : μμν΄μ£Όλ ν΄λμ€ ( λΆλͺ¨(parent)ν΄λμ€, μμ(super)ν΄λμ€, κΈ°λ°(base)ν΄λμ€ )
- μμ ν΄λμ€ : μμ λ°λ ν΄λμ€ ( μμ(child)ν΄λμ€, νμ(sub)ν΄λμ€, νμλ(derived)ν΄λμ€ )
* μμ±μμ μ΄κΈ°ν λΈλμ μμλμ§ μλλ€. λ©€λ²λ§ μμλλ€.
* μμ ν΄λμ€μ λ©€λ² κ°μλ μ‘°μ ν΄λμ€λ³΄λ€ νμ κ°κ±°λ λ§λ€.
* ν΄λμ€ Childμ Child2κ° λͺ¨λ Parentν΄λμ€λ₯Ό μμλ°κ³ μλ€.
* Parentν΄λμ€μ μμμΈ Childν΄λμ€μ Child2ν΄λμ€λ μ‘°μμ λ©€λ²λ₯Ό μμλ°κΈ° λλ¬Έμ, Parentν΄λμ€μ μλ‘μ΄ λ©€λ²λ₯Ό μΆκ°ν΄μ£Όλ κ²μ Childν΄λμ€μ Child2ν΄λμ€μ μλ‘μ΄ λ©€λ²λ₯Ό μΆκ°ν΄μ£Όλ κ²κ³Ό κ°μ ν¨κ³Όλ€.
* μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ μ‘°μ ν΄λμ€μ λ©€λ²λ ν¨κ» μμ±λκΈ° λλ¬Έμ λ°λ‘ μ‘°μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ‘°μ ν΄λμ€μ λ©€λ²λ€μ μ¬μ©ν μ μλ€.
# 2. ν΄λμ€κ°μ κ΄κ³ - ν¬ν¨κ΄κ³
μμμ΄μΈμλ ν΄λμ€λ₯Ό μ¬μ¬μ©νλ λ°©λ²μΌλ‘λ ν΄λμ€ κ°μ ν¬ν¨(Composite)
κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ κ²μ΄λ€.
ν΄λμ€ κ°μ ν¬ν¨κ΄κ³λ₯Ό λ§Ίμ΄ μ£Όλ κ²μ ν ν΄λμ€μ λ©€λ²λ³μλ‘ λ€λ₯Έ ν΄λμ€ νμ
μ μ°Έμ‘°λ³μλ₯Ό μ μΈνλ κ²μ λ»νλ€.
class Circle {
int x; // μμ μ xμ’ν
int y; // μμ μ yμ’ν
int r; // λ°μ§λ¦(radius)
}
class Point {
int x; // μμ μ xμ’ν
int y; // μμ μ yμ’ν
}
Pointν΄λμ€λ₯Ό μ¬μ¬μ©ν΄μ Circleν΄λμ€λ₯Ό μμ±νλ€.
class Circle {
Point c = new Point(); // μμ
int r;
}
λ¨μλ³λ‘ μ¬λ¬ κ°μ ν΄λμ€λ₯Ό μμ±ν λ€μ, μ΄ λ¨μ ν΄λμ€λ€μ ν¬ν¨κ΄κ³(λ©€λ²λ³μ)λ‘ μ¬μ¬μ©νλ©΄ λ³΄λ€ κ°κ²°νκ³ μμ½κ² ν΄λμ€λ₯Ό μμ±ν μ μλ€.
# 3. ν΄λμ€κ°μ κ΄κ³ κ²°μ νκΈ°
ν΄λμ€λ₯Ό μμ±νλλ° μμ΄μ μμκ΄κ³λ₯Ό λ§Ίμ΄ μ€ κ²μΈμ§ ν¬ν¨κ΄κ³λ₯Ό λ§Ίμ΄ μ€ κ²μΈμ§ κ²°μ νλ κ²μ λλλ‘ νΌλμ€λ¬μΈ μ μλ€.
μμκ΄κ³ : '~μ ~μ΄λ€.(is-a)'
ν¬ν¨κ΄κ³ : '~μ ~μ κ°μ§κ³ μλ€.(has-a)'
- Carν΄λμ€μ SportsCarν΄λμ€λ
SportsCarλ Carμ΄λ€.
(μμκ΄κ³) - Cardν΄λμ€μ Deckν΄λμ€λ
Deckμ Cardλ₯Ό κ°μ§κ³ μλ€.
(ν¬ν¨κ΄κ³)
# ex) ν¬ν¨κ΄κ³ μμ
class DeckTest {
public static void main(String args[]) {
Deck d = new Deck(); // μΉ΄λ ν λ²μ λ§λ λ€.
Card c = d.pick(0); // μκΈ° μ μ μ μΌ μμ μΉ΄λλ₯Ό λ½λλ€. cardArr[0]μ μ μ₯λ Cardκ°μ²΄μ μ£Όμκ° μ°Έμ‘°λ³μ cμ μ μ₯
System.out.println(c); // System.out.println(c.toString());κ³Ό κ°λ€.
d.shuffle(); // μΉ΄λλ₯Ό μλλ€.
c = d.pick(0); // μμ νμ μ μΌ μμ μΉ΄λλ₯Ό λ½λλ€.
System.out.println(c);
}
}
class Deck {
final int CARD_NUM = 52; // μΉ΄λμ κ°μ
Card cardArr[] = new Card[CARD_NUM]; // Cardκ°μ²΄ λ°°μ΄μ ν¬ν¨
Deck() { // Deckμ μΉ΄λλ₯Ό μ΄κΈ°ννλ€.
int i = 0;
for(int k=Card.KIND_MAX; k>0; k--)
for(int n=0; n<Card.NUM_MAX; n++)
cardArr[i++] = new Card(k, n+1);
}
Card pick(int index) { // μ§μ λ μμΉμ μλ μΉ΄λ νλλ₯Ό κΊΌλ΄μ λ°ν
return cardArr[index];
}
Card pick() { // Deckμμ μΉ΄λ νλλ₯Ό μ ννλ€.
int index = (int)(Math.random() * CARD_NUM);
return pick(intdex);
}
void shuffle() { // μΉ΄λμ μμλ₯Ό μλλ€.
for(int i=0; i < cardArr.length; i++) {
int r = (int)(Math.random() * CARD_NUM);
Card temp = cardArr[i];
cardArr[i] = cardArr[r];
cardArr[r] = temp;
}
}
}
class Card {
static final int KIND_MAX = 4; // μΉ΄λ 무λ¬μ μ
static final int NUM_MAX = 13; // 무λ¬λ³ μΉ΄λ μ
static final int SPACE = 4;
static final int DIAMOND = 3;
static final int HEART = 2;
static final int CLOVER = 1;
int kind;
int number;
Card() {
this(SPACE, 1);
}
Card(int kind, int number) {
this.kind = kind;
this.number = number;
}
public String toString() { // toString()μ μΈμ€ν΄μ€μ μ 보λ₯Ό λ¬Έμμ΄λ‘ λ°νν λͺ©μ μΌλ‘ μ μλ κ²
String[] kinds = {"", "CLOVER", "HEART", "DIAMOND", "SPACE"};
String numbers = "0123456789XJQK";
return "kind : " + kinds[this.kind] + ", number : " + numbers.charAt(this.number);
}
}
- toString( )μ λͺ¨λ ν΄λμ€μ μ‘°μμΈ Objectν΄λμ€μ μ μλ κ²μΌλ‘, μ΄λ€ μ’ λ₯μ κ°μ²΄μ λν΄μλ toString( ) νΈμΆνλ κ²μ΄ κ°λ₯νλ€.
# 4. λ¨μΌ μμ(single inheritance)
μλ°
μμλλ¨μΌμμ
λ§μ νμ©νλ€. λ€μ€μμμ νμ©νλ©΄ μ¬λ¬ ν΄λμ€λ‘λΆν° μμλ°μ μ μκΈ° λλ¬Έμ 볡ν©μ μΈ κΈ°λ₯μ κ°μ§ ν΄λμ€λ₯Ό μ½κ² μμ±ν μ μλ€λ μ₯μ μ΄ μμ§λ§, μλ‘ λ€λ₯Έ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²κ°μ μ΄λ¦μ΄ κ°μ κ²½μ° κ΅¬λ³ν μ μλ λ°©λ²μ΄ μλ€λ λ¨μ μ κ°μ§κ³ μλ€.
# 5. Object ν΄λμ€ - λͺ¨λ ν΄λμ€μ μ‘°μ
Objectν΄λμ€
λ λͺ¨λ ν΄λμ€ μμκ³μΈ΅λμ μ΅μμμ μλ μ‘°μν΄λμ€
λ€λ₯Έ ν΄λμ€λ‘λΆν° μμμ λ°λλ€κ³ νλλΌλ μμκ³μΈ΅λλ₯Ό λ°λΌ μ‘°μν΄λμ€, μ‘°μν΄λμ€μ μ‘°μν΄λμ€λ₯Ό μ°Ύμ μ¬λΌκ°λ€ 보면 κ²°κ΅ λ§μ§λ§ μ΅μμ μ‘°μμ Objectν΄λμ€μΌ κ²μ΄λ€.