Java/Java
추상 클래스 ( abstract class )
DDG9
2024. 4. 24. 17:40
추상 클래스란?
추상 클래스(Abstract Class)는 하나 이상의 추상 메서드를 포함하고 있는 클래스입니다. 추상 메서드는 구현이 없는(메서드 몸체가 없는) 메서드이며, 추상 클래스 내에서는 이러한 추상 메서드의 정의만을 포함하고 있습니다.
추상 클래스는 직접적으로 객체를 생성할 수 없으며, 다른 클래스에서 상속받아 구현되어야 합니다.
추상 메서드
int add(int x, int y); // 선언
int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님
Animal ㅡ Human ㅡ Person
ㅡTiger
/**
* 추상 클래스란?
* 추상 메서드를 포함하고 있거나
* abstract 키워드를 가지고 있는 클래스를 말한다.
* 추상 클래스는 바로 new 키워드로 객체를 생성할 수 없다.
*/
// 추상 메서드를 포함하는 클래스는 반드시 추상 클래스가 되어야 한다
public abstract class Animal {
String name;
public void move() {
System.out.println("동물이 이동을 합니다");
}
// 하나 이상의 추상 메서드가 있다면 ...
// 추상 메서드 -> 메서드의 선언부만 존재 + abstract
public abstract void hunt();
// 코드 테스트
public static void main(String[] args) {
Animal animal; // 데이터 타입으로 선언 가능
// 추상 클래스는 기본적으로 new 할 수 없다.
// animal = new Animal();
} // end of main
}
// 추상 클래스를 상속한 경우
// 2가지 해결 방법
// 1. 자식클래스를 추상 클래스로 만들어 버린다.
// 2. 추상 메서드를 오버라이드해서 구현 메서드로 재정의한다.
public abstract class Human extends Animal {
@Override
public void move() {
System.out.println("사람이 움직입니다");
}
}
public class Tiger extends Animal {
// 재정의 - 구현 메서드
@Override
public void hunt() {
System.out.println("호랑이가 앞발로 사냥을 합니다");
}
@Override
public void move() {
System.out.println("살금살금 이동합니다");
}
}
public class Person extends Human {
@Override
public void hunt() {
System.out.println("사람이 권총으로 사냥을 합니다");
}
}
※ 이탤릭체 -> 추상 클래스로 작성
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("컴퓨터를 켭니다");
}
public void turnOff() {
System.out.println("컴퓨터를 끕니다");
}
}
public class DeskTop extends Computer {
@Override
public void display() {
System.out.println("데스크톱 화면");
}
@Override
public void typing() {
System.out.println("데스크톱 타자치기");
}
}
public abstract class NoteBook extends Computer {
public void typing() {
System.out.println("노트북 타자치기");
}
}
public class MyNoteBook extends NoteBook {
@Override
public void display() {
System.out.println("My노트북 화면");
}
}
public class ComputerTest {
public static void main(String[] args) {
Computer computer1 = new DeskTop();
Computer computer2 = new MyNoteBook();
computer1.turnOn();
computer1.display();
computer1.typing();
computer1.turnOff();
System.out.println("====================");
computer2.turnOn();
computer2.display();
computer2.typing();
computer2.turnOff();
}
}