본문 바로가기

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' 카테고리의 다른 글

[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