- 추상 메소드 : 선언되어 있으나 구현되지 않은 메소드, 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 |