기존 클래스들의 공통적인 요소를 모아 클래스를 만들어내는 기술이다.
바로 예시를 보자
abstract class Animal {
private String name;
// 추상 메서드 선언
public abstract void makeSound();
// 일반 메서드
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
//추상 클래스 Animal을 상속받는 구현 클래스 Dog
class Dog extends Animal {
// 추상 메서드 구현
@Override
public void makeSound() {
System.out.println(getName() + "가 멍멍 소리를 낸다.");
}
}
//추상 클래스 Animal을 상속받는 구현 클래스 Cat
class Cat extends Animal {
// 추상 메서드 구현
@Override
public void makeSound() {
System.out.println(getName() + "가 야옹 소리를 낸다.");
}
}
public class Ex1_Abstract {
public static void main(String[] args) {
// Dog 클래스의 인스턴스 생성
Dog myDog = new Dog();
myDog.setName("멍멍이");
myDog.makeSound();
// Cat 클래스의 인스턴스 생성
Cat myCat = new Cat();
myCat.setName("야옹이");
myCat.makeSound();
}
}
부모인 Animal클래스가 abstract 를 사용함으로써 추상클래스가 만들어졌다.
왜 사용했을까?
public abstract void makeSound ();
메소드를 사용하기위해 추상클래스를 만들어준것이다.
그리고 추상클래스는 자식이 무조건 오버라이딩 받아야하며 메서드를 재정의해줘야한다.
즉 추상클래스를 사용함으로써
강제성 제공, 일관성 유지 를 할수있다.
마지막 으로 중요한것 ! 추상클래스는 객체생성을 하는법이 조금 다르다.
추상 클래스 Animal을 직접적으로 인스턴스화할 수 없다.
그렇기 때문에 자식 클래스의 객체를 생성해서 접근해야한다.
'(혼) (공) (자)' 카테고리의 다른 글
인터페이스-1 (0) | 2024.01.22 |
---|---|
인터페이스 (0) | 2024.01.17 |
Class - 다형성 (2) (1) | 2024.01.16 |
Class 다형성 / 타입변환 (0) | 2024.01.16 |
다중 생성자 (0) | 2024.01.12 |