Java

자바 프로그래밍 (Java) - 25 : 상속 (final과 abstract - 1)

n.han 2016. 7. 13. 15:03

- 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