• 추상 메소드 : 선언되어 있으나 구현되지 않은 메소드, abstract로 선언
    • 추상 메소드는 서브클래스에서 오버라이딩하여 구현해야 함.
//example
public abstract String getName();
public abstract void setName(String name);
  • 추상 클래스 
    • 추상 메소드를 하나라도 가진 클래스 : 클래스 앞에 반드시 abstract라고 선언해야 함
    • 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
//추상 메소드를 포함하는 추상 클래스
abstract class Animal{//추상 클래스 선언
    public Animal(){}
    public void shout(){bark()}
    abstract public void bark();//추상 메소드
}
//추상 메소드가 없는 추상 클래스
abstract class Player{//추상 클래스 선언
    String name;
    public void play(String name){}
}
  • 추상 클래스는 객체를 생성 할 수 없음
abstract class Blah(){}
public class AbstractError{
	public static void main(String []args){
    	Blah blah;
        blah = new Blah();//!컴파일 오류! 추상 클래스 Blah의 객체를 생성할 수 없음
    }
}

   ㄴ>  Exception in thread "main" java.lang.Error: unresolved compliation problem:

                       Cannot instantiate the type Blah


  • 추상 클래스의 상속
    • 추상클래스의 단순 상속 
      • 추상 클래스를 상속받아 추상 메소드를 구현하지 않으면 서브 클래스 역시 추상 클래스가 됨
      • 서브 클래스도 abstract로 선언 해야 됨
    • 추상클래스의 구현 상속
      • 서브 클래스 에서 슈퍼 클래스의 추상 메소드 구현(오버라이딩)
      • 서브 클래스는  추상 클래스 아님
abstract class Player{
	public abstract void run();
}
abstract class ChessPlayer extends Player{//추상 클래스.run()메소드 상속
//(추상 클래스의 단순 상속)
}
class FootballPlayer extends Player{//추상 클래스가 아니므로 객체(인스턴스) 생성 가능
//(추상 클래스의 구현 상속)
    @Override
    public void run(){
    	System.out.println("Run!");//run 오버라이딩
    }
}

  • 추상 클래스의 용도
    • 설계와 구현 분리
      • 슈퍼 클래스에서는 개념 정의 : 서브 클래스 마다 다른 규현이 필요한 메소드는 추상 메소드로 선언
      • 각 서브 클래스에서 구체적 행위 구현 : 서브 클래스 마다 목적에 알맞게 추상 메소드 다르게 구현
    • 계층적 상속 관계를 갖는 클래스 구조를 만드는 경우

'JAVA' 카테고리의 다른 글

[Java.4-1] 패키지 1 : 패키지의 개념  (0) 2022.04.19
[Java.3-5] 인터페이스  (0) 2022.04.16
[Java.3-3] 메소드 오버라이딩  (0) 2022.04.16
[Java.3-2] 업캐스팅과 다운캐스팅  (0) 2022.04.16
[Java.3-1] 상속 basic  (0) 2022.04.16

+ Recent posts