추상 클래스
abstract class 클래스명{
}
객체화 하는 것이 목표가 아니라 "설계를 하는 것이 목표였던 클래스들"
=> 클래스들의 기준이 되는 것이 목표
- 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없습니다.
- 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여
부모 객체를 생성한 후 자식 객체를 생성 합니다.
추상 클래스는 직접 객체를 생성할 수 없습니다!
▲ 자식 클래스의 객체를 생성하고, 자식 클래스를 통해 추상 클래스의 메서드 호출이 가능합니다!
✋ 추상클래스를 사용하는 이유
- 자식 클래스들이 공통적으로 가져야 하는 메서드를 가져야 할 때
- 부모 클래스의 객체를 생성할 일이 없을 때
ex)
추상클래스 기본예제
package test01;
abstract class Receipt{ // 추상클래스(부모클래스)
String chef;
Receipt(String chef){
this.chef=chef;
}
void info() {
System.out.println("이 레시피는 "+chef+" 셰프님의 레시피입니다.");
}
}
class PastReceipt extends Receipt{ // 부모클래스(Receip)를 상속받는 자식클래스(PastReceip)
PastReceipt(String chef){
super(chef); // 추상클래스(부모클래스) 생성자 호출
}
void makeSource() {
System.out.println("파스타 소스를 직접 만듭니다.");
}
}
public class Test01 {
public static void main(String[] args) {
// Receipt re = new Receipt(); ---> 사용X
// ▲ 추상 클래스는 직접 객체를 생성할 수 없습니다!
PastReceipt pr = new PastReceipt("홍길동"); // 자식 클래스를 객체 생성
pr.info(); // 자식 객체를 통해 추상 클래스의 메서드 호출 가능O
}
}
출력)
pr.info()를 통해 콘솔창에 출력
이 레시피는 홍길동 셰프님의 레시피입니다.
✅ 추상 메서드 오버라이딩 및 재정의
=> 오버라이딩
abstract class 클래스명{
abstract void 메서드명();
}
부모클래스 상속 받은 자식클래스{
@Override
void 메서드명(){
구현할 코드
}
}
ex) abstract void draw();
추상 클래스를 상속받은 모든 자식 클래스는 반드시 추상 메서드를 오버라이딩 및 재정의하여 구현해야힙니다.
=> 그렇지 않으면 컴파일 에러가 발생!
✋ 추상메서드를 사용하는 이유
- 자식클래스 간의 공통적인 필드와 메서드 이름을 통일하고,
- 반드시 구현해야 하는 메서드를 선언함으로써 자식클래스에게 공통 규격을 제공한다!
package class01;
abstract class Shape{ // 추상클래스(부모클래스)
String name;
double area;
abstract void draw(); // 추상메서드
}
class Rect extends Shape{ // 부모클래스 상속 받은 자식클래스
@Override // 오버라이딩
void draw() { // 부모클래스에서 만든 추상 메서드
System.out.println("네모 그리기"); // 재정의(구현)
}
}
class Circle extends Shape{
@Override
void draw() {
System.out.println("원 그리기");
}
}
class Tri extends Shape{
@Override
void draw() {
System.out.println("세모 그리기");
}
}
public class Test02 {
public static void main(String[] args) {
Circle c=new Circle();
c.draw();
}
}
출력)
원 그리기
🔑 keyPoint.
1. 객체화 불가능
생성자를 가질 수 있음에 유의!
new 연산자와 함께 사용 x
객체화 하는 것이 목표가 아니라 "설계를 하는 것이 목표였던 클래스들"
=> 클래스들의 기준이 되는 것이 목표
2. 추상메서드를 소유할 수 있음
=> 오버라이딩을 "강제"
=> 메서드 바디{}를 가질 수 없음
abstract void draw(); // 추상메서드
1. 생성자 컨트롤 / 자식의 생성자를 잘 만들어 낼 수 있는가?
2. 추상메서드 / 오버라이딩을 할 수 있는가?
3. 인자로 객체 / 해당 객체를 사용할 수 있는가?
[JAVA/JAVA] - [JAVA 기초 이론] 인터페이스 / 추상 클래스 / 상속 비교 정리
[JAVA 기초 이론] 인터페이스 / 추상 클래스 / 상속 비교 정리
인터페이스 (Interface) 인터페이스는 클래스에 대한 약속을 정의합니다. 클래스가 해당 인터페이스를 구현하면 인터페이스에 정의된 모든 메서드를 반드시 구현해야 합니다. // 인터페이스 정의 i
coding-bird.tistory.com
'Language > JAVA' 카테고리의 다른 글
[JAVA 기초 이론] 오버로딩 / 오버라이딩 (0) | 2023.05.22 |
---|---|
[JAVA 기초 이론] 예외처리 try / catch / finally (0) | 2023.05.21 |
[JAVA 기초 이론] 캡슐화 private / getter / setter (0) | 2023.05.18 |
[JAVA 기초 이론] 상속 extends (0) | 2023.05.18 |
[JAVA 기초 이론] 멤버변수 static (0) | 2023.05.18 |