상속 - 기존 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것
기존에 정의되어 있던 클래스 부모 클래스(parent class) 또는 기초 클래스(base class) 라고함
새롭게 작성되는 클래스 자식 클래스(child class) 하위 클래스(sub class) 파생 클래스(derived class) 라고 함
장점
1. 기존의 클래스 재활용 가능
2. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성하면, 자식 클래스에선 해당 멤버를 작성하지 않아도 됨
3. 클래스 간의 계층적 관계를 구성함으로서 다형성의 문법적 토대를 마련
자식 클래스
class 자식클래스이름 ectends 부모클래스이름{...}
super 키워드 - 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조변수
인스턴스는 this 부모,자식 이름 같을 경우 super
메소드 오버라이딩 - 부모 클래스에서 이미 정의된 메소드를 자식 크래스에서 같은 시그니처를 갖는 메소드로 다시 정의
조건
1. 메소드의 선언부는 기존 메소드와 완전히 같아야 함
2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없음
3. 부모 클래스의 메소드볻 더 큰 범위의 예외를 선언할 수 없음
다형성 - 하나의 객체가 여러 가지 타입을 가질 수 있는 것
참조 변수의 다형성 - 부모 타입의 참조변수로 자식 타입의 인스턴스를 참조할 수 있도록 하고 잇음
참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 같거나 적어야 참조할 수 잇음
타입 변환
1.서로 상속 관계에 있는 클래스 사이에만 타입 변환을 할 수 있음
2. 자식 클래스 타입에서 부모 클래스 타입으로의 타입 변환은 생략 가능
3. 부모 클래스 타입에서자식 클래스 타입으로의 타입 변환은 반드시 명시해야 함
instanceOf 연산자 - 런타임에 참조 변수가 실제로 참조하고 있는 인스턴스의 타입 확인을 도와줌
참조변수 instanceof 클래스이름 - true false 반환
추상 클래스 메소드 - 자식 클래스에서 반드시 오버라이딩 해야만 사용할 수 있음
abstract 반환타입 메소드이름();
인터페이스 - 다중 상속, 추상 메소드와 상수만을 포함함
class 클래스이름 implements 인터페이스이름{..}
내부 클래스 - 하나의 클래스 내부에 선언된 또다른 클래스
장점
1. 내부클래스에서 외부 클래스의 멤버에 손 쉽게 접근 가능함
2.서로 관련있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가시킴
3. 외부에서는 내부 클래스에 접근할 수 있도로그 코드의 복잡성을 줄일 수 잇음
종류
1. 정적 클래스(static class) - 외부 클래스의 클래스 메소드에 사용될 목적
2. 인스턴스 클래스(instance class) - static 키워드를 가지지 않는 클래스
3. 지역 클래스(local class) - 외부 클래스의 메소드나 초기화 블록에 선언된 클래스
4. 익명 클래스(anonymous class) - 선언과 동시에 객체 생성, 단 하나의 객체만을 생성