추상 클래스
- 객체를 직접 생성할 수 있는 클레스들의 공통적인 특성을 추철해서 선언한 클래스
- 추상클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고 추가적인 특성(필드, 메소드)을 가질 수 있음
추상 클래스의 용도
- 공통된 필드와 메소드의 이름을 통일할 목적
- 실체 클래스를 작성할 때 시간 절약
- 작성해야할 클래스가 다수이고 이 클래스들이 동일한 필드와 메소드를 가져야 할 경우, 설계자는 공통된 부분을 춯상 클래스로 설계하는 것이 좋음
- 추상 클래스를 상속해서 구체적인 클래스를 만듦
추상 클래스 선언
public abstract class 클래스 {
//필드
//생성자
//메소드
}
- abstract를 붙이면 new 연산자를 이용해서 객체 못만들고 상속을 통해 자식 클래스만 만들 수 있음
- new 연산자로 직접 호출할 수는 없지만 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성
- 추상 클래스도 생성자가 반드시 있어야 함
public abstract class Phone {
//필드
public String owner;
//생성자
public Phone(String owner) v{
this.owner =owner;
}
//메소드
public void turnOn() {
System.out.println("폰 전원을 켭니다.");
}
public void turnOff() {
System.out.println("폰 전원을 끕니다.");
}
}
- 부모 클래스의 super(owner) 코드로 생성자를 호출함
public abstract class SmartPhone extends Phone {
//생성자
public SmartPhone(String owner) v{
super(owner);
}
//메소드
public void internetSearch() {
System.out.println("인터넷 검색을 합니다.");
}
}
}
추상 메소드와 재정의
- 추상클레스는 실체 클래스의 멤버(필드, 메소드)를 통일하는 게 목적
- 모든 실체들이 가지고 있는 메소드의 실행 내용일 동일하면 추상 클래스에 메소드를 작성
- 메소드 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우 -> 추상 클래스는 추상 메소드 선언 가능
[public | protected] abstract 리턴타입 메소드이름(매개변수, ...);
- 추상 클래스 설계 시 하위 클래스가 실행 내용을 반드시 채우도록 강제하고 싶은 메소드가 있을 경우 추상 메소드 선언
- 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용 작성해야함 -> 아니면 컴파일 에러 발생
확인문제
- 추상 클래스는 직접 new 연산자로 객체를 생성할 수 없다 (o)
- 추상 클래스는 부모 클래스로만 사용 (o)
- 추상 클래스는 실체 클래스들의 공통된 특성(필드, 메소드)로 구성된 클래스이다. (o)
- 추상 클래스에는 최소한 하나의 추상 메소드가 있어야 한다 (x)
- 추상 메소드는 선언부만 있고 실행 블록을 가지지 않는다 (o)
- 추상 메소드는 자식 클래스에서 재정의 해서 실행 내용을 결정해야 한다 (o)
- 추상 메소드를 재정의 하지 않으면 자식 클래스도 추상 클래스가 되어야 한다 (o)
- 추상 메소드가 있더라도 해당 클래스가 꼭 추상 클래스가 될 필요는 없다 (x)
'Java > 혼자 공부하는 자바' 카테고리의 다른 글
혼자공부하는자바 8-2 타입 변환과 다형성 (0) | 2022.12.05 |
---|---|
혼자공부하는자바 8-1 인터페이스 (0) | 2022.12.05 |
혼자공부하는자바 7-2 타입 변환과 다형성 (0) | 2022.11.30 |
혼자공부하는자바 7-1 상속 (0) | 2022.11.30 |
혼자공부하는자바 6-6 패키지와 접근 제한자 (0) | 2022.11.28 |