JAVA/Java 기초

추상클래스.java

john_ 2023. 1. 16. 09:51
728x90

2023.01.13 - [JAVA/Java 기초] - 메소드 재정의.jav

 

메소드 재정의.jav

2023.01.12 - [JAVA/Java 기초] - 오버라이딩(overriding).java 오버라이딩(overriding).java 2023.01.12 - [JAVA/Java 기초] - 상속.java 상속.java 2023.01.11 - [JAVA/Java 기초] - 싱글톤 패턴.java 싱글톤 패턴.java 2023.01.11 - [JAVA/J

less-go.tistory.com

이어지는 내용입니다.


추상 클래스 : 자식 클래스에서 사용할 기능의 틀을 만들어 놓은것입니다.

추상클래스 == 부모클래스 :

  • 추상클래스에서 틀을 생성,  자식 클래스에서 기능에 대한 구체적인 기능을 구현합니다.
  • new 연산자를 통해 객체를 직접 만들지 못하고 상속을 통해서 자식클래스만 만들수 있습니다.
abstract 선언을 해서 추상클래스를 선언합니다.
필드와 메소드를 선언해줍니다.
  • 하나 이상의 추상 메소드가 있어야 합니다.
  • 메소드에 abstract 선언 해서 추상메소드() 선언을 해줍니다.

 

 


추상 메소드와 재정의

  • 자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할때, 메소드 선언부만 동일 하고 실행 내용은 자식 클래스 마다 달라야 하는 경우 추상메소드를 선언 할수 있습니다.
  • 일반 메소드 선언과 차이점은 abstract 키워드가 붙고, 메소드 실행 내용인 중괄호가 없습니다.

 


예제입니다.

package java230116;
//부모클래스 : Animal
public abstract class Animal {	// abstract 키워드 붙혀서 추상 클래스

	public void breathe() {
		System.out.println("숨을 쉽니다.");
	}
	
	public abstract void sound();
	//추상 메소드 선언 : 사운드라는 기능을 자식클래스에서 반드시 구현해야 합니다.
}
//자식클래스 : Dog
public class Dog extends Animal{

	@Override	//부모의 추상 메소드를 오버라이딩을 통해 자식클래스에서 구체적으로 구현
	public void sound() {
		System.out.println("멍멍");
	}
}
//자식 클래스 : Cat
public class Cat extends Animal{

	@Override
	public void sound() {
		System.out.println("야옹");
	}
}
//실행부
public class AbstractMethodExample {

	public static void main(String[] args) {

		Dog d = new Dog();
		d.sound();
		
		Cat c = new Cat();
		c.sound();
		
		//다형성
		animalSound(new Dog());
		animalSound(new Cat());
	}
	
	public static void animalSound(Animal animal) {
		animal.sound();
	}
}

 


 

sealed 클래스 :

  • java 15 부터 무분별한 자식클래스 생성을 방지하기 위해 봉인된 클래스가 도입 됬습니다.
  • sealed 키워드를 사용하면 permits 키워드 뒤에 상속 가능한 자식클래스를 지정합니다.
  • final은 더이상 상속할수 없다는 뜻이고, non-saealded는 봉인을 해제 한다는 뜻입니다.
public sealed class Person permits, Employee, Manger{...}
public final class Employee extends Person{...}
public non-sealed class Manager extends Person{...}

 

728x90

'JAVA > Java 기초' 카테고리의 다른 글

컬렉션자료구조2.java  (0) 2023.01.26
인터페이스(Interface).java  (0) 2023.01.16
메소드 재정의.jav  (0) 2023.01.13
오버라이딩(overriding).java  (0) 2023.01.12
클래스와 인스턴스 등...(리마인드용)  (0) 2023.01.12