- 상속:
기존의 클래스로 새로운 클래스를 작성하는 것
두 클래스를 부모와 자식으로 관계를 맺어주는것
class 자식클래스 extends 부모클래스{}
자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
자손의 멤버 개수는 조상보다 적을 수 없다.
자손의 변경은 조상에 영향을 미치지 않는다.
- 포함관계: 클래스의 멤버로 참조변수를 선언하는 것(객체 생성)
작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.
- 관계결정
상속 ~은 ~이다.
포함 ~은 ~을 가지고 있다. (대부분)
- 자바는 단일 상속만 허용한다.
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
- Object클래스 모든 클래스의 조상
- 오버라이딩: 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
선언부 변경불가 내용만 변경가능
- 조건:
선언부가 조상클래스의 메서드와 일치
접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
- 오버로딩: 기존에 없는 새로운 메서드 정의 상속과 관계없음
- 오버라이딩: 상속받은 메서드 내용을 변경하는 것
- this 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어있음
- super : this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용.
- super() – 조상의 생성자
자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
조상의 멤버들도 초기화되어야 하기 때문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다
-패키지(package): 서로 관련된 클래스와 인터페이스의 묶음.
-import문:사용할 클래스가 속한 패키지를 지정하는데 사용
import문은 패키지문과 클래스선언의 사이에 선언한다
- 접근제어자
private: 같은 클래스 내에서
default: 같은 패키지 내에서
protected: 같은 패키지 내에서, 다른 패키지의 자손 클래스 내에서
public: 접근 제한 없음
- 캡슐화와 접근제어자
외부로부터 데이터를 보호하기 위해서
메서드를 통한 간접접근
외부에는 불필요한 내부적으로만 사용되는 부분을 감추기 위해
- 다형성
여러가지 형태를 가질 수 있는 능력
조상 타입 참조 변수로 자손 타입 객체를 다루는 것 Tv 리모콘으로 스마트Tv 조종
Tv t = new SmartTv(); 타입 불일치 가능
자손타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
SmartTv s = new Tv(); 에러
- 참조변수의 형변환
사용할 수 있는 멤버의 갯수를 조절하는 것
조상 자손 관계의 참조변수는 서로 형변환 가능
- instanceof 연산자
참조변수의 형변환 가능여부 확인에 사용. 가능하면 true 반환
- 매개변수의 다형성
참조형 매개변수는 메서드 호출시 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
- 추상 클래스
미완성 설계도 미완성 메서드를 갖고 있는 클래스(몸통{}이 없음)
미완성 인스턴스 생성 불가
상속을 통해 추상메서드를 완성해야 인스턴스 생성 가능
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나
기존클래스의 공통 부분을 뽑아서 추상클래스를 만든다.
- 인터페이스
추상 메서드의 집합
구현된 것이 전혀 없는 설계도 껍데기 모든멤버가 public
public abstract 생략가능
(상수, static, 디폴트)
- 인터페이스 상속
인터페이스의 조상은 인터페이스만 가능
다중 상속 가능(추상메서드는 충돌해도 문제 없음)
- 인터페이스 구현
인터페이스에 정의된 추상 메서드를 완성
class 클래스이름 implements 인터페이스이름{}
- 추상클래스와 인터페이스 차이점: 인터페이스는 iv가질 수 없음
- 인터페이스를 이용한 다형성
- 인터페이스 장점
두 객체간의 연결, 대화, 소통을 돕는 중간역할을 한다.
선언과 구현을 분리시킬 수 있다.
개발 시간을 단축할 수 있다. 껍데기로 사용
변경에 유리한 유연한 설계
표준화 가능
서로 관계없는 클래스들의 관계를 맺어줄 수 있다.
- 인터페이스에 새로운 메서드(추상메서드)를 추가하기 어려움-> 디폴트 메서드
- 디폴트 메서드가 기존의 메서드와 충돌시 해결책
인터페이스를 구현한 글래스에서 디폴트 메서드 오버라이딩
조상클래스 메서드 상속 디폴트 메서드 무시
- 내부 클래스
클래스 안의 클래스
- 장점
내부 클래스에서 외부 클래스의 멤버를 쉽게 접근할 수 있다.
코드의 복잡성을 줄일 수 있다.
- 익명 클래스
이름이 없는 일회용 클래스 정의와 생성을 동시에
new 조상/인터페이스(){}
'JAVA' 카테고리의 다른 글
java.lang패키지와 유용한 클래스 (0) | 2022.03.08 |
---|---|
예외처리 (0) | 2022.03.07 |
객체지향 프로그래밍 (0) | 2022.03.05 |
배열 (0) | 2022.03.04 |
조건문과 반복문 (0) | 2022.03.04 |