◎ 추상 클래스 : 객체를 생성할 수 있는 실체 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스
추상 클래스는 실체 클래스의 부모 역할. 공통적인 필드나 메소드를 물려받을 수 있습니다.
1. Phone 부모 클래스
public class Phone { String owner; Phone(String owner){ this.owner = owner; } void turnOn() { System.out.println("폰 전원을 켭니다."); } void turnOff() { System.out.println("폰 전원을 끕니다."); } }
2. SmartPhone 자식 클래스
public class SmartPhone extends Phone { SmartPhone(String owner){ super(owner); } void internetSearch() { System.out.println("인터넷 검색을 합니다."); } }
3. PhoneExample 메인 클래스
public class PhoneExample { public static void main(String[] args) { SmartPhone smartPhone = new SmartPhone("홍길동"); smartPhone.turnOn(); smartPhone.internetSearch(); smartPhone.turnOff(); } }
추상 클래스 선언 : 클래스 선언에 abstract 키워드를 붙입니다.
new 연산자를 이용해서 객체를 직접 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있습니다.
추상 메소드와 재정의
▷ 자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때, 메소드 선언부만 동일하고 실행 내용은 자식 클래스마다 달라야 하는 경우 추상 메소드를 선언할 수 있습니다.
▷ 일반 메소드 선언과의 차이점은 abstract 키워드가 붙고, 메소드 실행 내용인 중괄호 {}가 없습니다.
1. Animal 추상(부모) 클래스
public abstract class Animal { public void breathe() { System.out.println("숨을 쉽니다."); } public abstract void sound(); }
2. Dog 자식 클래스
public abstract class Animal { public void breathe() { System.out.println("숨을 쉽니다."); } public abstract void sound(); }
3. Cat 자식 클래스
public class Cat extends Animal { @Override public void sound() { System.out.println("야옹"); } }
4. AbstractMethodExample 메인 클래스
public class AbstractMethodExample { public static void main(String[] args) { Dog dog = new Dog(); dog.sound(); Cat cat = new Cat(); cat.sound(); // 매개 변수의 다형성 animalSound(new Dog()); animalSound(new Cat()); } public static void animalSound(Animal animal) { animal.sound(); } }
◎ sealed 클래스
▷ java15부터 무분별한 자식 클래스 생성을 방지하기 위해 봉인된 클래스가 도입
▷ sealed 키워드를 사용하면 permits 키워드 뒤에 상속 가능한 자식 클래스를 지정
▷ final은 더 이상 상속할 수 없다는 뜻이고, non-sealed는 봉인을 해제한다는 뜻
추상클래스는 함수의 다형성 때문에 사용한다고 합니다.
아직은 왜 사용하는지 잘 모르겠네요,,,ㅎㅎ
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > Java' 카테고리의 다른 글
[java] 인터페이스2 (0) | 2023.01.16 |
---|---|
[java] 인터페이스 (2) | 2023.01.16 |
[java] 이것이 자바다 ch07 상속3 (0) | 2023.01.13 |
[java] 이것이 자바다 ch07 상속2 (0) | 2023.01.13 |
[java] 이것이 자바다 ch07 상속 (2) | 2023.01.12 |