카테고리 없음
[java] 상속
NaZZU
2024. 5. 31. 23:36
객체 지행 프로그램에서 상속은 자식 (하위, 파생) 클래스가 부모 (상위) 클래스의 멤버를 물려받는 것을 의미한다.
자식이 부모를 선택해서 물려받을 수 있으며, 부모 클래스의 필드와 메소드를 상속받는다.
상속의 효과
- 부모 클래스를 재사용해 자식 클래스를 빨리 개발 가능
- 반복된 코드 중복을 줄임
- 유지 보수 편리성 제공
- 객체 다형성 구현 가능
부모 클래스의 private한 필드와 메소드, 다른 패키지의 default 필드와 메소드는 상속을 받을 수 없다.
(사실 protected나 public한 메소드를 이용하면 간접적으로 제어할 수 있다. like getter/setter)
자식 클래스가 상속할 부모의 클래스를 지정할 때 extends 키워드를 사용한다.
ex) public class child extends parent
java는 단일 상속만 지원하며, 여러개의 부모클래스를 상속받을 수 없다.

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
|
package Practice;
public class Phone {
// private으로 설정하면 상속이 불가능하다
// 대신 getter setter를 사용하면 간접적으로 제어가 가능하다
public String model;
public String color;
public void bell()
{
System.out.println("벨이 울립니다");
}
public void sendVoice(String msg)
{
System.out.println("나 : " + msg);
}
public void reciveVoice(String msg)
{
System.out.println("너 : " + msg);
}
public void hangUp()
{
System.out.println("전화를 끊습니다");
}
}
|
cs |
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
|
package Practice;
public class SmartPhone extends Phone {
private boolean wifi;
public SmartPhone(String model, String color)
{
this.model = model;
this.color = color;
//super(model, color); 부모 클래스에 생성자가 있는경우 부모 클래스의 생성자 호출 가능
}
public boolean isWifi()
{
return wifi;
}
public void setWifi(boolean wifi) {
this.wifi = wifi;
System.out.println("wifi 상태 변경");
}
public void internet()
{
if (wifi == true)
System.out.println("인터넷 연결");
else
System.out.println("인터넷 연결 실패");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package Practice;
public class SmartPhoneEx {
public static void main(String[] args)
{
SmartPhone myPhone = new SmartPhone("S24", "yellow");
System.out.println("모델 : " + myPhone.model);
System.out.println("색상 : " + myPhone.color);
System.out.println("wifi : " + myPhone.isWifi());
myPhone.bell();
myPhone.sendVoice("Hello");
myPhone.reciveVoice("World");
myPhone.hangUp();
myPhone.setWifi(true);
myPhone.internet();
}
}
|
cs |

부모 클래스에 생성자가 존재한다면, super(매개값, ...) 으로 부모 클래스의 생성자를 호출 가능하다.
super 생성자는 반드시 자식 생성자의 첫 줄에 위치해야 하며, 부모 생성자가 존재하지 않는다면 컴파일 에러가 난다.