JAVA 객체 지향 핵심

(JAVA)상속(Inheritance) - 14

mynote6676 2025. 4. 21. 16:03

학습 목표

1. 상속에 대한 개념을 이해하자.

2. 오버라이드란 뭘까? (부모 클래스의 메서드 재정의)

 

 

 

상속(Inheritance)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 상속은 기존의 클래스를 확장하여 새로운 클래스를 정의하는 메커니즘을 말합니다. 상속을 통해 기존 클래스의 속성과 메서드를 재사용하고 확장하여 새로운 클래스를 만들 수 있습니다.

이를 위해 상속에서는 두 개의 클래스가 필요합니다:

  1. 부모 클래스(Parent Class) 또는 슈퍼 클래스(Superclass): 기존에 정의된 클래스로, 상속의 대상이 되는 클래스입니다. 부모 클래스의 속성과 메서드를 자식 클래스에게 상속합니다.
  2. 자식 클래스(Child Class) 또는 서브 클래스(Subclass): 부모 클래스를 확장하여 새롭게 정의되는 클래스입니다. 자식 클래스는 부모 클래스의 모든 속성과 메서드를 상속받습니다.

 

 

상속 문법에 대해서 익숙해져 보자.

package com.inheritance;

//선임이 작성한 코드라고 가정한다.
public class A {

    String name;
    int height;
    int weight;
    int age;

}


 

 

package com.inheritance;

public class B {

    System name;
    int height;
    int weight;
    int age;

    //선임이 작업한 코드는 그대로 두고 기존 코드를 복사 붙혀넣기 한 다음
    //추가적인 필드를 선언해서 만들어 본다
    int level;
    String nickName;

    //만약 여러분들이 상속이라는 기법을 배웠다면 ...좀더 편함
}

 

package com.inheritance;

//상속이란 기법을 배운 개발자라면...
//A 클래스에 속성과 상태를 물려받을 수 있다.

//자바에서는 단일 상속만을 지원한다.
//부모클래스 A가 되고 C클래스가 자식 클래스가 됨
public class C extends A {
    //C extends A
    //여기 코드에 보이지 않지만 자동으로 A 에 선언된
    //필드를 물려 받겠다.

    int level;
    String nickName;

}

 

 

 

상속 - 메서드 물려받기와 메서드 오버라이드 개념 알아 보기

 

package com.inheritance;

public class Cal {

    // 메서드를 만들어 보자

    public int sum(int n1, int n2){
        return  n1 + n2;
    }

    public int multiply(int n1 , int n2){
        return  n1 * n2;
    }
}// end og class

// xxx.java 하나의 자바 파일에 여러개의 클래스를 선언할 수 있다.
//단 스코프는 분명히 구분이 되어 진다.
//중요. 단 하나의 자바파일에 public 클래스는 오직 하나만 존재할 수있다.
//문법 그냥외워요.

//부모 자식관계 클래스가 됨
class ChildCal extends Cal{

    //마이너스 기능을 추가 요청
    public int minus(int n1 , int n2){
        return n1 - n2;
    }

    //곱하기 기능은 -선임
    //곱하기 기능에서 n1 과 n2에 0이 들어 온다면 0을 입력하지 마시오.
    //라는 문구를 나올수 있게 수정 요청

    //상속을 사용했을 때 메서드 오버라이드 개념!!!!이 있다.
    //부모 클래스에 메서드를 재정의할 수 있다. 이것을 메서드 오버 라이드라고한다.
    //문법- 부모 클래스에 메서드 이름과 매개변수 개수 및 타입이 동일해야함.
    public int multiply(int n1 , int n2){
        if(n1 == 0 || n2 ==0){
            System.out.println("0을 입력하지마시오.");
        }
        return  n1 * n2;
    }


}// end of class

 

 

 

Class Diagram Element

Class

클래스는 보통 3개 구역으로 나뉜 사각형으로 그립니다.

클래스의 이름, 속성, 기능을 표기할 수 있으며 이름만 필수로 명시해야 합니다.

보통 속성과 기능을 생략해 다이어그램을 그리는 경우는 주로 클래스의 흐름 분석 위주의 작업입니다.

 

 

  • 접근 제한자 (Access modifier)
    • + : public
    • : private
    • # : protected
  • 속성 (Attribute)
    • 접근제어자 이름: 타입 = 기본값
    • 기본값 생략 가능
    • title: String = ""
  • 기능 (Method)
    • 접근제어자 이름(파라미터 속성): 리턴값
    • void 리턴값은 생략 가능
      • setTitle(String)
      • getTitle(): String
      •  

 

 

 

package com.inheritance;

public class Customer {

    private int customerID;
    private String customerName;
    private String customerGrade;
    private int bonusPoint;
    private double bonusRatio;



//    public Customer(int customerID, String customerName, String customerGrade, int bonusPoint, int bonusRatio) {
//        this.customerID = customerID;
//        this.customerName = customerName;
//        this.customerGrade = customerGrade;
//        this.bonusPoint = bonusPoint;
//        this.bonusRatio = bonusRatio;
//    }
    //getter
//    public int getCustomerID(){
//        return customerID;
//    }
//    public String getCustomerName(){
//        return customerName;
//    }
//    public String getCustomerGrade(){
//        return customerGrade;
//    }
//    public int getBonusPoint(){
//        return bonusPoint;
//    }
//    public double getBonusRatio(){
//        return bonusRatio;
//    }

    //메서드
    public int calcPrice() {

        return 0;
    }

    public String showCustomerInfo() {

        return "";
    }
}

 

package com.inheritance;

public class VIPCustomer extends Customer {

    private int agentID;
    private double salesRatio;


    //메서드
    public int getAgentID(){
        return agentID;
    }
}