[JAVA] 추상 클래스

XXXX·2024년 1월 9일
0
post-thumbnail

추상 클래스

추상 메소드 (Abstract Method)

  • 자식 클래스에서 반드시 오버라이딩 해야하는 메소드
  • 선언만 하고 구현 내용 없음
abstract void print();

추상 클래스 (Abstract Class)

  • 하나 이상의 추상 메소드를 포함하는 클래스
  • 반드시 구현해야 하는 부분에 대해 명시적으로 표현
  • 추상 클래스 자체는 객체 생성 불가

abstract class 클래스명 {
	...
	abstract void print();
    // 안의 멤버들 중에 적어도 하나는 추상 메소드가 존재해야 한다.
}


// 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() {
        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) {
        // Test code
        UsbPort1 usb1 = new UsbPort1(1);
        WiFi wifi = new WiFi(0);
    }

}

0개의 댓글