오늘은 NCS 공부도 병행하여서 분량이 적습니다.
1. 상속의 목적(extends)
1) 연관된 일련의 클래스들에 공통적인 규약을 정의할 수 있다.
1. Object 클래스
1) 모든 클래스는 Object 클래스를 상속한다.
2) 클래스를 정의할 때 어떤 클래스도 상속하지 않으면 해당 클래스는 java.lang 패키지에 묶여 있는 Object 클래스를 상속한다.
클래스와 메소드의 final 선언
1) 클래스를 정의하는 데 있어서, 해당 클래스를 다른 클래스가 상속하는 것을 원치 않는다 면 final 선언을 추가하면 된다.
(1) public final class MyLastCLS {...}
2) 메소드에 final을 선언하여 오버라이딩을 허용하지 않을 수도 있다.
(1) public final void func(int c) {...}
@Override(어노테이션, Annotations)
1) 어노테이션은 일종의 메모다.
2) “이 메소드는 상위 클래스의 메소드를 오버라이딩 할 목적으로 정의하였습니다.”
추상 메소드만 담고 있는 인터페이스
1) 인터페이스는 class 대신 interface, 메소드는 몸체없이 ;로 마무리 된다.
(1) interface Printable{
public void print(String doc); // 추상메소드
}
2) 상속과 달리 implements(구현) 를 사용한다.
(1) class Printer implements Printable
3) 한 클래스는 둘 이상의 인터페이스를 동시에 구현할 수 있다.
4) 상속과 구현은 동시에 가능하다.
5) 인터페이스의 형을 대상으로 참조변수의 선언이 가능하다.
(1) Printable(인터페이스) prn(참조변수) = new Printer(); // Printer는 클래스
6) 인터페이스의 추상 메소드와 이를 구현하는 메소드사이에는 오버라이딩 관계가 성립한다.
7) @Override(어노테이션) 선언이 가능하다.
인터페이스에 선언되는 메소드와 변수
1) 인터페이스의 모든 메소드는 public이 선언된 것으로 간주한다.
2) 선언과 동시에 값으로 초기화를 해야 한다.
3) 모든 변수는 public, static, final이 선언된 것으로 간주한다.
4) 두 인터페이스 사이의 상속도 extends 로 명시한다.
인터페이스의 디폴트 메소드
1) 자체로 완전한 메소드이다.
2) 이를 구현하는 클래스가 오버라이딩 하지 않아도 된다.
3) interface Printable {
void print(String doc);
default void printCMYK(String doc) { } // 디폴트 메소드
}