JAVA

[Java] 추상 클래스(abstract)

yujin0517 2022. 8. 19. 15:07

추상 클래스(abstract)

-> 추상 클래스는 클래스의 구체적인 내용을 작성하지 않고 '공통적인 특징'을 추상적으로 선언합니다. 반환 값도 없으며, 메소드 명만 선언합니다. 

메인 클래스에 추상 클래스의 객체를 바로 생성할 수 없습니다. 

그렇다면 추상 클래스는 어떻게 사용해야 할까요?

추상 클래스는 자식 클래스에게 상속을 해줌으로써 사용 가능합니다. 

즉, 추상 클래스는 부모 클래스의 역할을 하며 자식 클래스는 추상 메소드를 재정의하여 사용합니다. 이러한 추상 클래스의 특징 때문에 추상 클래스는 상속의 '강제성'을 가집니다. (추상 클래스에도 일반 메소드를 포함할 수 있음)

 

<예시>

abstract class Animal {
	abstract void cry(); //추상클래스
	void eat() {System.out.println("eating");} //일반메소드 포함 가능!
}

class Dog extends Animal { //추상클래스의 자식클래스1
	void cry() {
		System.out.println("dog crying");
	}
}

class Cat extends Animal { //추상클래스의 자식클래스2
	void cry() {
		System.out.println("cat crying");
	}
}

class Animal2 { //일반클래스 
	void fly() {
		System.out.println("flying");
	}
}

public class day1_ex01 {
	public static void main(String[] args) {		
		System.out.println("-------general method-------");
		Animal2 dragonfly = new Animal2(); //일반 클래스의 객체 생성
		dragonfly.fly();

		System.out.println("-------abstract method-------");
		Dog dog = new Dog(); //추상클래스를 상속 받은 자식클래스의 객체를 생성
		dog.cry();
		dog.eat();
        
		Cat cat = new Cat(); //추상클래스를 상속 받은 자식클래스의 객체를 생성
		cat.cry();
		cat.eat();
	}
}

 

<콘솔>

콘솔창

 

<요약>

  • 추상 클래스는 다른 클래스들의 공통적인 특징을 변수나 메소드로 정의만 해놓은 클래스이다.
  • 클래스 앞의 abstract 키워드와 추상 메소드가 없으면 일반 클래스와 차이가 없다. 
  • 추상 클래스에는 일반 필드, 생성자, 메소드를 포함할 수 있다. (반대는 불가능!)
  • 추상 클래스에는 메소드 선언만 있고 구체적인 내용은 없기 때문에 객체를 생성할 수 없다.  -> 상속의 강제성!

* 추상 클래스를 왜 사용하는가?

    -> 부모 클래스가 선언해놓은 메소드를 자식 클래스에 재정의 하기를 강제하기 위함이다. 

    -> 일반 메소드를 구현하면 누군가는 해당 메소드를 재정의(구현) 하지 않을 수도 있다. 

'JAVA' 카테고리의 다른 글

소수 찾기, 구하기  (0) 2023.02.01
[Java] 다형성(polymorphism)  (0) 2022.08.31
[Java] 오름차순, 내림차순 정렬  (0) 2022.08.17
[자바] 싱글톤 패턴(Singleton pattern)  (0) 2021.07.14
예외 처리  (0) 2021.07.13