Programming/Java
[Java 자바] 7. 상속 ③ 추상클래스 (Abstract Class)
erinh
2022. 8. 8. 21:45
반응형
7-8. 추상 클래스
7-8-1. 추상 클래스의 개념
자식클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드로 선언부만 존재하며, 구현부는 작성되어 있지 않음
- 이 구현부를 자식클래스에서 오버라이딩해서 사용
- 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위해 사용
- 상속 전용 클래스
7-8-2. 추상 클래스의 용도
1) 실체 클래스들의 공통된 필드와 메소드의 이름 통일 목적
- 실체 클래스를 설계하는 사람이 여럿일 경우, 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있음
(ex. 소유자의 이름을 저장하는 필드를 Telephone에서는 owner, Smartphone에서는 user 라고 할 수 있음)
2) 실체 클래스를 작성할 때 시간을 절약
- 공통적인 필드와 메소드를 추상클래스에 선언해두고, 실체 클래스마다 다른점만 선언하여 사용함으로써 시간 절약 가능
- 클래스를 어떤 구조로 작성해야 하는지 알려줌으로써 구체적인 클래스를 만들 수 있음
7-8-3. 추상 클래스 선언
클래스 선언에 abstract 키워드를 붙여 선언 가능하며, 이 경우 new 연산자를 통한 객체 생성은 불가능
- 단, 자식클래스에서 객체 생성을 할 때 super(...)를 호출하여 추상 클래스 객체를 생성하므로, 추상 클래스도 생성자가 있어야 함
public abstract class Animal {
// 필드
public int age;
// 생성자
// 자식 객체가 생성될 때 super(..)를 호출해서 추상 클래스 객체를 생성하므로 생성자가 반드시 있어야 함
public Animal(String name) {
this.name = name;
}
// 메소드
public void eat() {
System.out.println("음식을 먹는다.");
}
}
7-8-4. 추상 메소드와 오버라이딩
//Animal.java
public abstract class Animal {
public abstract void sound();
}
// Dog.java
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
// Cat.java
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("야옹");
}
}
// AnimalTest.java
public class AnimalTest {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.sound();
cat.sound();
System.out.println(dog.kind);
System.out.println("----");
// 상위클래스 타입으로 자식을 참조할 수는 있음
Animal animal = null;
animal = new Dog();
animal.sound();
animal = new Cat();
animal.sound();
}
}
반응형