-
[Java 자바] 7. 상속 ③ 추상클래스 (Abstract Class)Programming/Java 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(); } }
반응형'Programming > Java' 카테고리의 다른 글
[Java 자바] 8. 인터페이스 ② 사용 방법, 인터페이스 상속, 디폴트 메소드 (0) 2022.08.09 [Java 자바] 8. 인터페이스 ① 선언과 구현 (0) 2022.08.09 [Java 자바] 7. 상속 ② 타입 변환과 다형성, instanceof (0) 2022.08.07 [Java 자바] 7. 상속 ① 클래스 상속, super, 메소드 오버라이딩 (0) 2022.08.07 [Java 자바] 6. 클래스 ⑥ 접근 제한자 (public, protected, default, private), Getter/Setter, 어노테이션 (0) 2022.07.31