본문 바로가기

BackEnd/Java

[java] 추상 클래스

728x90
반응형

◎ 추상 클래스 : 객체를 생성할 수 있는 실체 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스

추상 클래스는 실체 클래스의 부모 역할. 공통적인 필드나 메소드를 물려받을 수 있습니다.

 

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는 봉인을 해제한다는 뜻

 

 

 

추상클래스는 함수의 다형성 때문에 사용한다고 합니다.

아직은 왜 사용하는지 잘 모르겠네요,,,ㅎㅎ

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

 

 

728x90
반응형

'BackEnd > Java' 카테고리의 다른 글