학습 목표
1. 상속에 대한 개념을 이해하자.
2. 오버라이드란 뭘까? (부모 클래스의 메서드 재정의)
상속(Inheritance)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 상속은 기존의 클래스를 확장하여 새로운 클래스를 정의하는 메커니즘을 말합니다. 상속을 통해 기존 클래스의 속성과 메서드를 재사용하고 확장하여 새로운 클래스를 만들 수 있습니다.
이를 위해 상속에서는 두 개의 클래스가 필요합니다:
- 부모 클래스(Parent Class) 또는 슈퍼 클래스(Superclass): 기존에 정의된 클래스로, 상속의 대상이 되는 클래스입니다. 부모 클래스의 속성과 메서드를 자식 클래스에게 상속합니다.
- 자식 클래스(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;
}
}
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA)연관관계(Association) - 16 (1) | 2025.04.22 |
---|---|
(JAVA)Composition(포함 관계) - 15 (2) | 2025.04.21 |
(JAVA)메서드 오버로딩 - 13 (1) | 2025.04.21 |
(JAVA)전화 번호 관리 프로그램 만들기(연습문제) - 12 (0) | 2025.04.19 |
Book으로 연습문제 재복습 (0) | 2025.04.19 |