4장의 중요한 내용들을 정리했다.
abstract 키워드, 추상 클래스, 추상 메서드
추상 메서드는 일반 메서드 앞에 abstract 키워드를 붙여 사용한다. 추상 메서드는 선언부는 있지만 구현부는 없어야한다.
abstract class Animal{
abstract public void say();
}
class Mouse extends Animal{
@Override
public void say(){
System.out.println("찍찍");
}
}
class Cat extends Animal{
@Override
public void say(){
System.out.println("야옹");
}
}
public class Main{
public static void main(String[] args){
new Mouse().say(); // 찍찍
new Cat().say(); // 야옹
}
}
1. abstract를 method에 붙이는 이유
위의 예시처럼 동물이 어떻게 우는지를 구현하는 것은 논리적으로 맞지 않고,
그 하위 클래스인 고양이나 쥐는 꼭 상속해야하는 멤버일 때 abstract 키워드를 사용하는 것이다.
만약 자식클래스가 상속받은 부모클래스의 abstract 를 구현하지 않으면 컴파일 에러가 발생한다.
2. abstract를 class에 붙이는 이유
또 동물의 객체를 만드는 것과 같은 상대적으로 상위개념의 구현화를 막기 위해서 class 키워드 앞에 abstract 키워드를 붙여 인스턴스를 생성하지 못하게 막는다. 추상클래스가 아니면 추상 메서드를 선언할 수 없다.
final 키워드
클래스에 달리면 상속불가
메서드에 달리면 오버라이딩 불가
필드에 달리면 초기화 이후 변경 불가
interface 키워드, implements 키워드
자바 8 이전에는 인터페이스 내에는 public 추상 메서드와, public 정적 상수만 가질수 있는데 코드 작성시에 없어도 public, static, abstract(메서드), final(변수)를 자바가 붙여준다.자바 8부터는 default 메서드도 허용한다.