헬린코린이

[JAVA] 추상클래스 본문

Programming/Java

[JAVA] 추상클래스

HCD 2022. 11. 24. 21:07

추상 클래스에 대해 알아보겠다.

 

추상 클래스란 쉽게 말해 추상 메서드를 가지고 있는 클래스이다.

abstract 키워드로 선언된 불완전한 클래스를 말하고. 추상 클래스는 인스턴스화 할 수는 없으나,

추상 클래스를 상속받는 자식 클래스의 인스턴스화는 가능합니다.

추상 클래스를 선언하는 방법은 다음과 같습니다.

abstract class A{ };

일반적인 클래스 앞에 abstract키워드만 붙여주면 된다 이로써 이 클래스는 추상 클래스가 되었다.

 

추상 메서드도 마찬가지로 abstract 키워드로 선언된 메서드를 말합니다. 추상 메서드는 {}가 없습니다. 코드를 보겠습니다.

abstract class A{

	abstract void hello();
}
class B extends A{ }

이 클래스를 상속한 class B가 있다고 하자

이 class B는 반드시 추상 메서드를 구현해야 한다. 

 

이게 추상 메서드와 일반 메서드의 차이점이다

일반 메서드를 상속받은 자식 클래스는 메서드를 구현해도 되고 안 해도 되지만

추상 클래스를 상속받은 자식 클래스는 반드시 메서드를 구현해야 한다. 

즉 오버 라이딩을 강제하고 있습니다.

 

그리고 추상 클래스는 추상 메서드를 포함하고 있다는 점을 제외하면, 일반 클래스와 모든 점이 같습니다.

즉, 생성자와 필드, 일반 메서드도 포함할 수 있습니다.

public class Test03 {
	public static void main(String[] args) {
		Dog d1 = new Dog("초코",2);
		Cat c1 = new Cat("나르",4);
		
		System.out.println(d1);
		d1.hello();
		System.out.println(c1);
		c1.hello();
		d1.eat();
		
	
	}
}
abstract class Animal{
	// 추상메서드를 클래스가 가지려면,
	// 반드시 추상클래스여야만한다.!
	String species;
	String name;
	int age;
	abstract void hello();
	void eat() {
		System.out.println("냠냠");
	}
	void sleep() {
		System.out.println("zzzz");
	}
	Animal(String species, String name, int age ){
		this.species = species;
		this.name=name;
		this.age = age;
	}
	@Override
	public String toString() {
		return this.species+" "+this.name+"는 "+this.age+"살"; 
	}
}
class Dog extends Animal {
	Dog(String name, int age){
		super("강아지", name, age);
	}
	@Override
	void hello() {
		System.out.println("멍멍");
	}
}
class Cat extends Animal{
	Cat(String name, int age){
		super("고양이", name, age);
	}
	@Override
	void hello() {
		System.out.println("야옹");
	}
}

간단한 추상 클래스를 이용한 코드이다. 이해하는데 어렵지 않을 것이다.

Comments