최신글
hyeonga_code
Java_49_super 본문
반응형
- super
- 상위 클래스 멤버에 접근하고자 할 때 사용합니다.
- super()
- 상위의 default 생성자를 호출합니다.
- 상위 클래스의 default 생성자가 없다면 오류가 발생합니다.
// 오류 : The constructor A07() is undefined.
- 상속 관계에서 상위 클래스의 멤버 필드 값을 받아오기 위해 상위 클래스의 생성자를 통해 받아옵니다.
- 지정하지 않을 경우 사용됩니다.
- this()와 같이 사용할 수 없습니다.
- 메소드의 첫 번째 줄에 위치해야 합니다.
- super('매개 변수')
'VIPCustomer.java'
'''
// super
public VIPCustomer(int id, String name) {
super(id,name); // 상위 클래스의 메소드를 호출합니다.
}
'''
=====
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
|
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; // 하위 클래스에서 선언한 변수의 정보를 초기화합니다.
}
// 가격 계산에 기능을 추가해야 합니다.
@Override // - 상위 클래스와 같은 이름의 메소드를 재정의하여 우선권을 가지게 되는 역할입니다.
public int calcPrice(int price) {
// 상위 클래스에서 메소드를 가져와 사용할 수 있으나 내부의 코드는 사용할 수 없습니다.
this.point += price * this.ratio;
return price - (int)( price * this.saleRatio );
// saleRatio가 실수형이므로 정수형으로 형변환 해야합니다.
}
// toString() 추가하기
@Override
public String toString() {
return "VIPCustomer [saleRatio=" + saleRatio + ", id=" + id + ", name="
+ name + ", grade=" + grade + ", point="+ point + ", ratio=" + ratio + "]";
}
// super
public VIPCustomer(int id, String name) {
super(id,name); // 상위 클래스의 메소드를 호출합니다.
}
}
|
'CustomerApp.java'
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package oop.inheritance;
public class CustomerApp {
public static void main(String[] args) {
VIPCustomer vip1 = new VIPCustomer();
/*
Customer()--->
VIPCustomer()--->
- 상위 클래스의 생성자를 호출한 뒤 하위 클래스의 생성자가 호출됩니다.
*/
}
}
|
=====
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
|
class A07{
int a;
int b;
public A07() {
a = 10;
b = 20;
}
}
class B07 extends A07{
int c;
int b;
// b 값을 B07에서 생성
public B07() {
// a,b가 출력되는 이유
// super(); 생략되어있기 때문
// public A07(int t)로 작성 시, 오류: Implicit super constructor A07() is undefined.
c = 30;
b = 100;
// b 값 설정
}
public void disp() {
System.out.println("a = " + a);
System.out.println("b = " + b);
// b = this.b
// B07에서 선언한 b 값이 출력됨
System.out.println("b = " + super. b);
// B07 클래스의 상위 클래스인 A07에서 선언한 값이 출력됨
System.out.println("c = " + c);
}
}
public class same {
public static void main(String[] args) {
B07 ap = new B07();
ap.disp();
}
}
|
반응형
'Java' 카테고리의 다른 글
Java_51_인터페이스_다형성_다형성 멤버 필드 법칙, 업 캐스팅, 다운 캐스팅, 다형성 멤버 메소드 법칙 (0) | 2023.10.13 |
---|---|
Java_50_인터페이스 (0) | 2023.10.13 |
Java_48_오버라이드 (0) | 2023.10.12 |
Java_47_상속 (0) | 2023.10.11 |
Java_46_toString (0) | 2023.10.09 |