• 상속(inheritance)이란 한 클래스의 속성과 메소드를 다른 클래스가 물려 받는 것을 의미
    • 즉, 기존의 부모 클래스의 기능을 자식 클래스가 물려 받아, 새로운 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것

      Untitled

    • 부모 클래스(parent class)

      • 기존에 정의되어 있던 클래스
    • 자식 클래스(child class)

      • 부모클래스를 상속하여 새롭게 작성되는 클래스
      • 부모 클래스에 새로운 필드, 메소드 를 하나 추가하면, 자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작
  • 기본 문법
    • class 자식클래스이름 extends 부모클래스이름 { ... }
  • 상속의 사용이유
    • 자식 클래스 설계 시 중복되는 요소를 미리 부모 클래스에 작성해서 중복을 제거
  • 주요 특성
    • 자식 클래스에는 부모 클래스의 필드와 메소드를 상속하고, 새로운 기능 추가 가능
    • 부모 클래스에서 private은 자식 클래스에서 접근 불가
    • 자바의 클래스는 단 한 개의 클래스만을 상속받는 단일 상속만이 가능
      • 추후 배우게 될 interface에서는 다중 상속(구현)이 가능
    • 자식 클래스는 부모 클래스의 메소드를 상속받아, 다시 새롭게 정의 가능
      • 메소드 오버라이딩
  • super키워드
    • super()
      • 자식클래스에서 부모 클래스의 생성자를 호출할 때 사용
    • super
      • 자식클래스에서 부모클래스의 메서드나 변수를 접근할때 사용
      • 일반적으로 자식클래스와 부모클래스가 같은 변수명이나 메서드명을 사용할때 활용
      • 예시
        • super.eat()
        • System.out.println(super.a);
  • 메서드 오버라이딩(method overriding)
    • 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 다시 정의하는 행위
    • 주요 특징
      • 오버라이딩하는 메소드는 부모 클래스의 메소드와 동일한 이름을 사용
      • 메소드의 파라미터(타입, 개수)도 동일
    • 오버로딩과 혼동하지 말것
      • 오버로딩(overloading)은 매개변수를 달리하여 새로운 메소드를 정의
      • 오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의
  • 패키지(package)
    • 패키지(package)란 클래스와 인터페이스의 집합이자, 하나의 디렉터리를 의미
    • 자바에서 패키지를 선언하는 방법
      • package 패키지이름;
    • 위와 같이 선언한 패키지에 속한 클래스를 다른 파일에서 사용하기 위해서는 import
      • import 패키지이름.클래스이름;
      • import 패키지이름.*;
      • 위와 같은 패키지이름.클래스이름을 통한 호출로서, 동일한 클래스명이 충돌하는 문제 해결
    • 주요 특징
      • 패키지는 다른 패키지를 포함할 수 있으며, 디렉터리의 계층 구조는 점(.)으로 구분
      • 별표(*)를 사용하여 패키지의 하위 패키지의 클래스까지 포함하지는 못함
        • import java.awt.; import java.util.;
        • 위 import를 import java.*; 이렇게 대체하는것은 불가
      • java.lang 패키지에 대해서는 import문 없이도 클래스 이름만으로 사용 가능
        • ex)import java.lang.String은 별도의 import없이 그냥 사용가능
  • 접근제어자
    • 클래스와 클래스 멤버의 선언 시 사용하여 외부 접근을 제어하는 목적으로 사용
    • 사용자가 굳이 알 필요가 없는 정보는 숨기기 위해 사용
    • 4가지 접근제어자
      • public, default, private, protected
      • 클래스에 적용되는 접근제어자
        • public, default
      • 변수, 메서드에 적용되는 접근제어자
        • public, default, private, protected
      • private
        • 같은 클래스내에서만 접근 허용
      • public
        • 해당 객체를 사용하는 프로젝트의 어디에서나 직접 접근
      • default
        • 접근 제어의 기본값
        • 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어
        • 같은 패키지에 속하는 멤버에서만 접근
      • protected
        • 자식 클래스에 대해서는 public 멤버처럼 패키지가 달라도 접근 가능
          • 상속관계가 없는 클래스일경우 다른 패키지내에서는 접근불가능
      • public > protected > default > private 순서로 접근제한 수준
    • 기타 제어자
      • static제어자
        • 변수에 사용시 클래스 변수
        • 메서드에 사용시 클래스 메소드
        • 프로그램 시작시에 생성되고 초기화 된다는 특징
      • final 제어자
        • 상수(constant)를 만들기 위해 사용
        • 클래스에 사용하면 상속불가한 클래스
          • final class Car {// 이 클래스는 타클래스에서 상속불가
        • 메소드에 사용하면 상속받은 부모 클래스의 메소드 재정의 불가(오버라이딩불가)
      • abstract 제어자
        • abstract 제어자를 통해 선언부만 있고 구현부가 없는 메소드를 생성
        • 하나 이상의 추상 메소드가 포함하고 있는 추상 클래스도 반드시 abstract 제어자 필요
        • 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위한 목적으로도 추상 메서드 사용
        • abstract클래스는 독자적으로 객체를 만드는것이 기본적으로 불가