JAVA - 상속

오스카·2024년 12월 12일

JAVA 공부

목록 보기
1/3

상속이란?

상속은 자바의 객체지향 프로그래밍에서 중요한 개념으로, 특정 클래스(부모 클래스)의 속성과 메서드를 다른 클래스(자식 클래스)가 물려받아 사용하는 것을 말한다.

  • 부모 클래스

    다른 클래스에게 자신의 속성과 기능을 물려줄 수 있는 클래스로, super class 또는 base class라고 불린다.
  • 자식 클래스

    부모 클래스로부터 속성과 기능을 상속받아 물려받은 클래스로, subclass 또는 child class라고 불린다.

  • 장점

    코드 재사용성, 계층적 설계 가능.
  • 단점

    클래스 간의 강한 결합으로 인해 유연성이 떨어질 수 있음.

구현방식

  • extends 키워드

    클래스 간의 상속에 사용된다.
  • implements 키워드

    인터페이스 구현에 사용된다.
	class 자식클래스 extends 부모클래스 {
    	// 추가적인 필드와 메서드 정의 가능
    }
	class 클래스명 implements 인터페이스1, 인터페이스2 {
    	// 인터페이스의 메서드 구현 필요
    }

특징

  1. 모든 자바 클래스는 자동으로 java.lang.Object 클래스를 상속받는다. 따라서 toString(), equals() 같은 메서드를 사용할 수 있다.
  2. private 멤버를 제외한 상위 클래스의 모든 멤버가 하위 클래스에 상속된다.
  3. 자바는 단일 상속만을 지원한다. 즉, 한 클래스는 하나의 부모 클래스만 가질 수 있다. 이는 모호성을 방지하기 위해서다.
	class a extends b 		// 가능
	class a extends b, c 	// 불가능

예시

// 이름과 전화번호를 속성으로 가지는 기본 사람 클래스
class Person {
    protected String name;
    protected String phoneNumber;

    public Person(String name, String phoneNumber) {
        this.name = name;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }
}

// 소속반 속성을 추가로 가지는 학생 클래스
class Student extends Person {
    private String className;

    public Student(String name, String phoneNumber, String className) {
        super(name, phoneNumber);
        this.className = className;
    }

    public String getClassName() {
        return className;
    }
}

// 과목 속성을 추가로 가지는 선생님 클래스
class Teacher extends Person {
    private String subject;

    public Teacher(String name, String phoneNumber, String subject) {
        super(name, phoneNumber);
        this.subject = subject;
    }

    public String getSubject() {
        return subject;
    }
}

// 메인 클래스
public class AcademyManagementSystem {
    public static void main(String[] args) {
        // 학생과 선생님 객체 생성
        Student student = new Student("홍길동", "010-1234-5678", "1반");
        Teacher teacher = new Teacher("김선생", "010-2345-6789", "수학");

        // 정보 출력
        System.out.println("=== 학생 정보 ===");
        System.out.println("이름: " + student.getName());
        System.out.println("전화번호: " + student.getPhoneNumber());
        System.out.println("반: " + student.getClassName());
        // === 학생 정보 ===
        // 이름: 홍길동
        // 전화번호: 010-1234-5678
        // 반: 1반

        System.out.println("\n=== 선생님 정보 ===");
        System.out.println("이름: " + teacher.getName());
        System.out.println("전화번호: " + teacher.getPhoneNumber());
        System.out.println("담당 과목: " + teacher.getSubject());
        // === 선생님 정보 ===
        // 이름: 김선생
        // 전화번호: 010-2345-6789
        // 담당 과목: 수학

    }
}
profile
몸이 셋 쯤 되고 싶은 초보 개발자

0개의 댓글