중급상속

사용자 관리 시스템

User 부모 클래스를 상속받는 Customer와 Admin 클래스를 구현합니다. 상속의 기본 개념과 메소드 오버라이딩을 학습합니다.

상속오버라이딩super 키워드

사용자 관리 시스템

📋 문제 설명

User 부모 클래스를 상속받는 CustomerAdmin 클래스를 구현하세요.

상속의 기본 개념메소드 오버라이딩을 학습합니다.


🎯 클래스 계층 구조

Java
User (부모 클래스)
 ├── Customer (자식 클래스)
 └── Admin (자식 클래스)

💻 코드 구조

User 클래스 (부모 클래스)

Java
public class User {
    protected String username;
    protected String email;

    public User(String username, String email) {
        // username과 email을 초기화
    }

    public void displayInfo() {
        // username과 email을 출력
        // 예: "사용자: [username], 이메일: [email]"
    }
}

필드

  • protected String username - 사용자 이름
  • protected String email - 이메일 주소

⚠️ protected 키워드: 자식 클래스에서 접근 가능하도록 설정


Customer 클래스 (자식 클래스)

Java
public class Customer extends User {
    private int loyaltyPoints;

    public Customer(String username, String email) {
        // 1. 부모 클래스의 생성자 호출 (super 사용)
        // 2. loyaltyPoints를 0으로 초기화
    }

    @Override
    public void displayInfo() {
        // 1. 부모 클래스의 displayInfo() 메서드 호출 (super 사용)
        // 2. loyaltyPoints 정보 추가 출력
        // 예: "적립 포인트: [loyaltyPoints]"
    }

    public void addPoints(int points) {
        // loyaltyPoints에 points를 더함
        // "포인트 [points]점이 적립되었습니다" 메시지 출력
    }
}

추가 필드

  • private int loyaltyPoints - 적립 포인트 (초기값: 0)

추가 메서드

  • addPoints(int points) - 포인트 적립

Admin 클래스 (자식 클래스)

Java
public class Admin extends User {
    private String role;

    public Admin(String username, String email, String role) {
        // 1. 부모 클래스의 생성자 호출 (super 사용)
        // 2. role 초기화
    }

    @Override
    public void displayInfo() {
        // 1. 부모 클래스의 displayInfo() 메서드 호출 (super 사용)
        // 2. role 정보 추가 출력
        // 예: "역할: [role]"
    }

    public void manageService() {
        // "관리자 [username]이(가) [role] 서비스를 관리합니다." 메시지 출력
    }
}

추가 필드

  • private String role - 관리자 역할 (예: "시스템 관리", "컨텐츠 관리")

추가 메서드

  • manageService() - 서비스 관리 기능

📝 Main 클래스 테스트

Java
public class Main {
    public static void main(String[] args) {
        // Customer 객체 생성
        Customer customer = new Customer("김철수", "chulsoo@example.com");

        // Customer 정보 출력
        customer.displayInfo();

        // 포인트 적립
        customer.addPoints(1000);

        // 적립 후 다시 정보 출력 (포인트 증가 확인)
        customer.displayInfo();

        System.out.println(); // 빈 줄

        // Admin 객체 생성
        Admin admin = new Admin("박관리", "admin@example.com", "시스템 관리");

        // Admin 정보 출력
        admin.displayInfo();

        // 서비스 관리 실행
        admin.manageService();
    }
}

💡 학습 포인트

1. 상속 (Inheritance)

  • extends 키워드로 부모 클래스 상속
  • 부모의 필드와 메서드를 자식이 물려받음

2. super 키워드

  • 생성자에서: super()로 부모 생성자 호출
  • 메서드에서: super.메서드명()으로 부모 메서드 호출

3. 메서드 오버라이딩 (Method Overriding)

  • @Override 어노테이션 사용
  • 부모의 메서드를 자식에서 재정의
  • 부모 메서드 기능을 유지하면서 추가 기능 구현

4. protected 접근 제어자

  • 같은 패키지 + 상속받은 자식 클래스에서 접근 가능