- final과 상속
final로 선언한 클래스는 상속을 하지 못하며, final로 선언한 메서드는 오버라이딩할 수 없다.
다음은 Person 클래스를 상속할 수 없게 만든 예제이다. 이미 클래스의 상속을 금지했기 때문에 의미가 없지만
eat 메서드도 final로 재정의를 금지하였다.
final public class Person { private String name; Person(String name){ this.name = name; }
public final void eat(){ System.out.println("Eating..."); } } |
- 추상 클래스 (abstract class)
추상 메서드란 메서드의 시그니처만 있고 바디가 없는 메서드를 말한다.
추상 클래스란 abstract 키워드를 이용하여 인스턴스를 만들 수 없도록 한 클래스이다.
또한 어떤 클래스에 추상 메서드가 하나라도 있다면 그 클래스는 추상 클래스이다.
하지만 추상 클래스는 추상 메서드가 꼭 있어야하는 것은 아니다.
다음은 Person의 eat 메서드를 시그니처만을 작성하여 추상화한 예제이다.
추상 메서드가 있지만 Person 클래스를 추상화하지 않아서 (abstract 키워드를 넣지 않아서) 컴파일 에러가 발생하는 것을 볼 수 있다.
즉, 어떤 클래스에 추상 메서드가 하나라도 있다면 그 클래스는 추상 클래스여야 한다.
public class Person { private String name; Person(String name){ this.name = name; }
public abstract void eat(); } Exception in thread "main" java.lang.Error: Unresolved compilation problems: The type Person must be an abstract class to define abstract methods The abstract method eat in type Person can only be defined by an abstract class |
'Java' 카테고리의 다른 글
자바 프로그래밍 (Java) - 27 : 이름 바인딩 (Name Binding) (0) | 2016.07.13 |
---|---|
자바 프로그래밍 (Java) - 26 : 상속 (final과 abstract - 2) (0) | 2016.07.13 |
자바 프로그래밍 (Java) - 24 : 상속 (오버라이딩) (0) | 2016.07.13 |
자바 프로그래밍 (Java) - 23 : 상속 (개관) (0) | 2016.07.13 |
자바 프로그래밍 (Java) - 22 : 정적 구성 요소(static)와 기능 클래스, 정적 초기화 블록(static initialization block) (4) | 2016.07.13 |