한 클래스의 속성과 메서드를 다른 클래스가 물려 받는 것을 의미.
기존의 부모 클래스의 기능을 자식 클래스가 물려 받아,
새로운 기능을 추가하거나 재정의(오버라이딩)하여 새로운 클래스를 정의하는 것.
class 자식클래스이름 extends 부모클래스이름 {...}

부모 클래스(parent class) : 기존에 정의되어 있던 클래스.
자식 클래스(child class) : 부모 클래스를 상속하기 위해 새롭게 작성되는 클래스.
자식 클래스 설계 시 중복되는 요소를 미리 부모 클래스에 작성해서 중복을 제거하기 위해 사용.
⇒ 재사용 목적 !
private 은 자식 클래스에서 접근 불가.부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 다시 정의하는 행위.
오버라이딩하는 메서드는 부모 클래스의 메서드와 동일한 이름을 사용해야 하며,
메서드의 파라미터(타입, 순서, 개수)도 동일해야 한다.
오버로딩은 매개변수를 달리하여 새로운 메서드를 정의하는 것이고,
오버라이딩은 상속받은 기존의 메서드를 재정의하는 것이다!
class parents{
int a = 10;
private int b = 20;
void parentMethod(){
System.out.println("부모 클래스입니다.");
}
}
public class C0301Inheritance extends parents{
int c = 30;
public static void main(String[] args) {
// System.out.println(a); => static 이 없어서 호출이 안된다.
C0301Inheritance c1 = new C0301Inheritance();
System.out.println(c1.a);
System.out.println(c1.c); // 자식 클래스라 하더라도 private 변수는 상속 및 접근 불가.
// 메서드 상속
c1.parentMethod();
}
// 부모 메서드 재정의 = overriding 오버라이딩 (매우 중요 !!!)
// @ : 성능의 최적화를 위해 붙여주는 게 좋은 것으로 알려져있음.
@Override
void parentMethod() {
System.out.println("부모 클래스가 아니라 자식 클래스입니다.");
}
void childMethod() {
System.out.println("자식 클래스입니다.");
}
}
클래스와 인터페이스의 집합이자, 하나의 디렉터리를 의미.
package 패키지이름;
위와 같이 선언한 패키지에 속한 클래스를 다른 파일에서 사용하기 위해서는 import.
import 패키지이름.클래스이름;
import 패키지이름.*;
클래스와 클래스 멤버의 선언 시 사용하여 외부 접근을 제어하는 목적으로 사용.
public : 같은 클래스 내에서만 접근 허용
default : 접근 제어의 기본값. 같은 패키지에 속하는 멤버에서만 접근 허용.
public : 외부로 공개되며, 객체를 사용하는 프로젝트의 어디에서나 직접 접근 가능.
protected : 자식 클래스에 대해서는 패키지가 달라도 접근 가능.
public > protected > default > private 순서로 접근 제한 수준을 가진다.
static : 변수에 사용시 클래스 변수 | 메서드에 사용시 클래스 메서드
final : 상수(constant)를 만들기 위해 사용.
abstract : 추상 제어자. 선언부만 있고 구현부는 없는 메서드 생성.