추상 클래스
추상 메소드 (Abstract Method)
- 자식 클래스에서 반드시 오버라이딩 해야하는 메소드
- 선언만 하고 구현 내용 없음
abstract void print();
추상 클래스 (Abstract Class)
- 하나 이상의 추상 메소드를 포함하는 클래스
- 반드시 구현해야 하는 부분에 대해 명시적으로 표현
- 추상 클래스 자체는 객체 생성 불가
abstract class 클래스명 {
...
abstract void print();
// 안의 멤버들 중에 적어도 하나는 추상 메소드가 존재해야 한다.
}
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) {
Student s1 = new Student();
s1.printInfo();
Person p2 = new Person() {
@Override
void printInfo() {
System.out.println("Main.printInfo");
}
};
p2.printInfo();
}
}
abstract class Device {
int deviceId;
abstract void deviceInfo();
abstract void connect();
abstract void disconnect();
abstract void send();
abstract void receive();
}
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("데이터를 수신합니다.");
}
}
class WiFi extends Device {
public WiFi(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("데이터를 수신합니다.");
}
}
public class Practice {
public static void main(String[] args) {
UsbPort1 usb1 = new UsbPort1(1);
WiFi wifi = new WiFi(0);
}
}