hyeonga_code

Java_47_상속 본문

Java

Java_47_상속

hyeonga 2023. 10. 11. 05:59
반응형


- 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