> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/java_oop_for_spring_framework/undefined/4-..md).

# 4장. 자바가 확장한 객체 지향

### abstract - 추상 메서드와 추상 클래스

* 슈퍼 클래스에서 메서드 시그니처는 정의하되, 정확한 동작은 지정하지 않을 때 abstact 메서드로 선언한다. abstract 메서드가 하나도 없더라도 abstract class로 선언은 가능하지만, abstract method가 있다면 반드시 abstract class로 선언해야한다.
* 추상 클래스는 인스턴스를 만들 수 없다. 만들어봤자 추상 메서드는 동작할 수 없으니

### Static 블록

* 클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록이다.
* static 블록에서 사용할 수 있는 속성과 메서드는 static 뿐이다.
* 클래스 정보는 클래스가 코드에서 맨 처음 사용될 때 T 메모리의 스태틱 영역에 로딩되며 이 때 단 한번 해당 클래스의 static 블록이 실행된다.

### final

* 변수, 메서드, 클래스에 적용 가능하다. 변수에 적용하면 불변 상수로 선언되고, 메서드와 클래스에 적용하면 상속이 불가능해진다.

### instanceof

* 객체가 특정 클래스의 인스턴스인지 물어보는 연산자다.
* instanceof는 강력하긴하지만 LSP를 어기는 코드에서 자주 나타나는 연산자이기에 냄새나는 코드는 아닌지 점검이 필요하다.

### interface, implement, super, this…

… 별 영양가는 없다.
