추상 메소드
자식클래스에서 반드시 오버라이딩 해야하는 메소드. 선언만 하고 구현 내용은 없음
추상 클래스
하나 이상의 추상 메소드를 포함하는 클랴스
반드시 구현 해야하느느 부분에 대해 명시적으로 표현
추상 클래스 자체는 객체 생성 불가
추상클래스를 사용하는 이유
구조적인 객체 설계로 유지보수를 용이하게 함. 범용 라이브러리나 프레임워크 시스템 설계 자주 쓰임.
link
☕ 추상 클래스(Abstract) 용도 완벽 이해하기
추상 클래스 와 추상화 우리가 지금 까지 사용해왔던 일반적인 클래스는 구체적(concrete)으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 추상 클래스는 구체적이지 않은
inpa.tistory.com
// Java 프로그래밍 - 추상 클래스
// 추상 클래스 Person
abstract class Person {
abstract void printInfo();
}
// 추상 클래스 상속
class Student extends Person {
public void printInfo() {
System.out.println("Student.printInfo");
}
}
public class Main {
public static void main(String[] args) {
// 추상 클래스의 사용
// Person p1 = new Person(); -> 기능이 있으면 바로 객체화할 수 있음
Student s1 = new Student();
s1.printInfo();
Person p2 = new Person() {
@Override
void printInfo() {
System.out.println("Main.printInfo");
}
};
p2.printInfo();
}
}
// Practice
// 아래 Device 추상클래스를 이용하여
// UsbPort1 클래스와 WiFi 클래스를 자유롭게 구현해보세요.
abstract class Device {
int deviceId;
abstract void deviceInfo();
abstract void connect();
abstract void disconnect();
abstract void send();
abstract void receive();
}
// UsbPort1 클래스
class UsbPort1 extends Device {
UsbPort1(int id) {
this.deviceId = id;
}
void deviceInfo() {
System.out.println("id = " + this.deviceId);
}
void connect() {
System.out.println("연결 하였습니다.");
}
void disconnect() {
System.out.println("연결이 해제되었습니다.");
}
void send() {
System.out.println("데이터를 전송합니다.");
}
void receive() {
System.out.println("데이터를 수신합니다.");
}
}
// WiFi 클래스
class WiFi extends Device {
public WiFi(int id) {
this.deviceId = id;
}
void deviceInfo() {
}
void connect() {
}
void disconnect() {
}
void send() {
}
void receive() {
}
}
public class Practice {
public static void main(String[] args) {
// Test code
UsbPort1 usb1 = new UsbPort1(1);
WiFi wifi = new WiFi(0);
}
}