hyeonga_code
Java_47_상속 본문
- Inheritance_상속
- Polymorphism_다형성을 확보하기 위한 가장 기본적인 방법입니다.
- 새로운 클래스에서 다른 클래스의 생성자를 제외한 멤버 변수, 메소드 등을 이용할 수 있습니다.
- Child_하위 클래스
- 상속을 받아온 새로운 클래스
- Super_상위 클래스
- 멤버 변수, 메소드를 제공하는 클래스
- 접근 제한자를 사용하여 이용 범위를 제한할 수 있습니다.
- 상위 클래스가 하나 이상일 수 없습니다.
class '클래스 이름' extends '상속할 클래스 이름'{ }
ex)
class 사람 {}
class 학생 extends 사람 {}
class 경찰 extends 사람 {}
T - 학생은 사람이다.
T - 경찰은 사람이다.
F - 경찰 중에 학생이 있다면 경찰은 학생이다.
>>> 학생 s = new 학생() > 경찰 중에는 학생이 있다.
- 포함 관계와 상속의 구분이 필요합니다.
- Java에서 생략이 가능한 것들
- import java.lang*
- default 생성자
- this
- extends Object
- 객체명을 출력할 경우, toString()값이 출력
- class Object
- extends
- 상속 관계
- 포함 관계
- 상품을 구매한 고객은 할인율이 올라갑니다.
'VIPCustomer.java'
=====
1
2
3
4
5
|
package oop.inheritance;
public class VIPCustomer extends Customer {
// Customer 클래스를 상속받아 접근합니다.
}
|
'CustomerApp.java'
'''
// VIP
VIPCustomer vip1 = new VIPCustomer();
vip1.id = 2010;
vip1.name = "vip_1";
System.out.println(vip1.toString());
'''
=====
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package oop.inheritance;
//모든 클래스는 패키지 안에 생성합니다.
public class CustomerApp {
// 모든 함수_메소드는 클래스 안에 작성합니다.
public static void main(String[] args) {
// Java의 모든 코드는 함수 안에 작성합니다.
// 생성자 호출
Customer cust1 = new Customer();
// 값 지정
cust1.id = 1010;
cust1.name = "cus1";
// 출력.toString();
System.out.println(cust1.toString());
/*
Customer [id=1010, name=cus1, grade=SILVER, point=0, ratio=0.0]
*/
Customer cust2 = new Customer(1020,"cus2");
System.out.println(cust2.toString());
/*
Customer [id=1020, name=cus2, grade=SILVER, point=0, ratio=0.0]
*/
Customer cust3 = new Customer(1030,"cus3",500);
System.out.println(cust3.toString());
/*
Customer [id=1030, name=cus3, grade=SILVER, point=500, ratio=0.0]
*/
// 계산
cust2.calcPrice(3000); // 5000원짜리 상품을 구매했습니다.
System.out.println(cust2.toString());
/*
Customer [id=1020, name=cus2, grade=SILVER, point=300, ratio=0.1]
*/
// VIP
VIPCustomer vip1 = new VIPCustomer();
vip1.id = 2010;
vip1.name = "vip_1";
System.out.println(vip1.toString());
/*
Customer [id=2010, name=vip_1, grade=SILVER, point=0, ratio=0.1]
- 생성자를 따로 선언하지 않았으므로 Customer 클래스의 생성자를 사용합니다.
*/
}
}
|
'VIPCustomer.java'
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package oop.inheritance;
public class VIPCustomer extends Customer {
// Customer 클래스를 상속받아 접근합니다.
private double saleRatio; // 적용할 할인률을 선언합니다.
// 기본 생성자
public VIPCustomer() {
this.grade = "VIP"; // 상위 클래스에서 SILVER 이었던 정보를 수정합니다.
this.ratio = 0.15; // 상위 클래스에서 0.1 이었던 정보를 수정합니다.
this.saleRatio = 0.1; // 하위 클래스에서 선언한 변수의 정보를 초기화합니다.
}
}
|
- protected
- 아무나 접근할 수 없게 작업하고 싶을 때
- 상속받은 클래스들만 접근할 수 있음
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class A06 {
int a = 10;
}
class B06 {
int b = 30;
A06 ap = new A06();
public void disp() {
System.out.println("a = " + ap.a);
System.out.println("b = " + b);
}
}
class C06 {
int c = 30;
B06 bp = new B06();
public void disp() {
System.out.println("a = " + bp.ap.a);
System.out.println("b = " + bp.b);
System.out.println("c = " + c);
}
}
|
>>>>>
=====
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
|
class A06 {
int a = 10;
// private int a = 10; 으로 작성
// class A06 내에서만 접근할 수 있으므로 오류 발생
// 오류 : The field A06.a is not visible.
// protected int a = 10;
// 상속 받은 클래스에서만 사용 가능
}
class B06 extends A06 {
// A06을 상속 받아 a를 불러올 수 있음
int b = 30;
public void disp() {
System.out.println("a = " + a);
System.out.println("b = " + b);
// System.out.println(c);
// 오류 : c cannot be resolved to a variable.
}
}
class C06 extends B06 {
// B06이 상속 받은 A06도 접근할 수 있음
int c = 30;
public void disp() {
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
|
- super
- 상위 클래스 멤버에 접근하고자 할 때 사용
'Java' 카테고리의 다른 글
Java_49_super (0) | 2023.10.12 |
---|---|
Java_48_오버라이드 (0) | 2023.10.12 |
Java_46_toString (0) | 2023.10.09 |
Java_45_클래스_중첩 클래스 (0) | 2023.10.08 |
Java_44_클래스_지정 예약어 (0) | 2023.10.07 |