추상 클래스
- 스스로는 인스턴스를 만들 순 없다.(포유류, 차, 곤충의 개념 등등)
- 자식클래스를 구현하기 위한 클래스로, 자식클래스간 공통분모를 정의하기 위해서 사용한다.
- 추상클래스들 내부는 protected로 되어 있다. 자식클래스들이 물려받아서 사용해야 하기 때문
- 추상클래스는 다형성을 가진다. 추상클래스로 자식 자료형을 다 받아줄 수 있다.
추상 메서드
- 스스로 선언만 하고 구현을 안함. 자식클래스에서 이걸 구현.
- 추상클래스에서 추상메서드로 지정한건 자식클래스에서 반드시 구현해주어야 한다. 필요한 기능을 강제할 수 있는 느낌. 안그러면 오류 발생.
- 추상메서드는 자식클래스에서 구현하라고 만든거라서 접근제어자가 의미가 없다. 구현하는 메서드에서 원하는대로 접근제어자를 사용하면 된다.
- 정적 메서드는 인스턴스를 생성해서 쓰는게 아니라서 추상메서드로 쓸수가 없다.( static 앞에 abstract를 붙일 수 없다.)
구체적인 예시
추상클래스 FormElement
public abstract class FormElement {
protected int space;
public FormElement(int space) {
this.space = space;
}
abstract void func ();
}
- func라는 추상메서드 생성.
Button 클래스
public class Button extends FormElement {
private String print;
public Button(int space, String print) {
super(space);
this.print = print;
}
@Override
void func() {
System.out.println(print + "입력 적용");
}
}
- Func 오버라이딩
Main클래스
public class Main {
public static void main(String[] args) {
Button button1 = new Button(2, "Enter");
Switch switch1 = new Switch(3, true);
DropDown dropDown1 = new DropDown(5, new String[] {
"이름 오름차순", "이름 내림차순",
"크기 오름차순", "크기 내림차순",
"날짜 오름차순", "날짜 내림차순"
});
// 💡 다형성 적용 확인
clickFormElement(button1);
clickFormElement(switch1);
clickFormElement(switch1);
clickFormElement(switch1);
clickFormElement(dropDown1);
}
public static void clickFormElement (FormElement fe) {
fe.func();
}
}
- clickFormElement메서드는 FormElement형 필드를 받아서 내부 func함수를 실행시키는 메서드.
- Button, Switch, DropDown 클래스는 전부 FormElement 자료형의 자식클래스이므로, 모두 자료형을 받아줄 수 있음.(다형성을 보여줌.)
- 그래서 ClickFormElement로 3개의 자식클래스의 func함수 전부 호출가능.
출처
제대로 파는 자바 (Java) - by 얄코 강의 - 인프런
적당히 배워서는 살아남을 수 없는 시대. 자바, 한 번에 제대로 파서 마스터하세요!, 자바(Java), 생기초부터 활용까지 강의 하나로 한번에 끝! 🎓 대학교 이메일 계정이 있다면? 👉 얄코 강의
www.inflearn.com
'얄코의 제대로 파는 자바 > 섹션5 객체지향 프로그래밍' 카테고리의 다른 글
싱글턴 (0) | 2024.03.22 |
---|---|
인터페이스 (0) | 2024.03.22 |
클래스의 final (0) | 2024.03.19 |
다형성 (0) | 2024.03.17 |
상속 (0) | 2024.03.16 |