메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용.
추상 메서드 : 선언부는 있는데 구현부가 없는 메서드 (몸체가 없음!)
추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야한다.
(추상 메서드 없이도 추상 클래스를 선언할 수는 있다)
이 클래스 자체로는 쓸모가 없지만 다른 클래스가 이 클래스를 상속받아 일부의 원하는 메서드만 오버라이딩 해도 된다.
추상클래스는 멤버 개수와 관련된 것이 아니라 추상 메서드를 포함하고 있다는 의미이다.
new
를 사용할 수 없다.추상메서드처럼 미완성 상태로 남겨두는 이유?
메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문!
일종의 추상클래스인데 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높다. 그래서 ⭐️일반메서드, 멤버변수를 구성원으로 가질 수 없다.⭐️
오직 추상메서드와 상수만을 멤버로 가질 수 있다.
interface
를 사용한다.public static final
이어야한다. (생략가능)public
추상메서드와 public
정적 상수만 가질 수 있다.public abstract
어야한다.(생략가능)public
, abstract
, 속성에 public
, static
, final
붙이지 않아도 자동으로 자바가 알아서 붙여준다.인터페이스는 인터페이로부터만 상속 가능하며 클래스와 달리 다중상속이 가능하다.
implements
extends A implements B
클래스의 인스턴스, 즉 객체를 만들 때마다 new
키워드를 사용한다.
동물 뽀로로 = new 동물();
클래스명 옆에 열고 닫는 소괄호는 왜 붙일까?
메서드를 의미할 때 소괄호를 붙였는데..
클래스명()
도 메서드다!
반환값이 없고 클래스명과 같은 이름을 가진 메서드를 객체를 생성하는 메서드,
객체 생성자 메서드라 한다. 줄여서 생성자라고 많이 부른다.
하지만 그런 메서드를 만든 적이 없는데?
자바가 알아서 인자가 없는 기본 생성자를 자동으로 만들어 주었다.
필요하다면 인자를 갖는 생성자를 더 만들 수도 있다.
final 마지막, 최종.키워드가 나타날 수 있는 곳은 클래스, 변수, 메서드.
객체가 특정 클래스의 인스턴스인지 물어보는 연산자.
결과로 true 또는 false를 반환한다.
객체가 자기 자신을 지칭할 때 쓰는 키워드.
지역변수와 객체변수가 같은 이름을 가졌을 때 지역변수에 저장되어 있는 값이 출력된다.
그러나 this키워드를 붙이면 객체 변수에 저장된 값을 사용하게 된다.
class 펭귄 {
int var = 10;
void test() {
int var = 20;
System.out.println(var); // 20 출력
System.out.println(this.var); // 10 출력
}
}
this
가 객체 멤버 메서드 내부에서 객체 자신을 지칭하는 키워드라면,
super는 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드.
(super.super로 상위의 상위 클래스의 인스턴스에는 접근 불가능하다)
자바의 정석, 스프링 입문을 위한 자바 객체지향의 원리와 이해