포슀트

Inheritance

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
학ꡐ: ν•œκ΅­λŒ€ν•™κ΅
*/

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.