hyeonga_code

Java_49_super 본문

Java

Java_49_super

hyeonga 2023. 10. 12. 06:59
반응형


      - 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();
    }
}
반응형