[JAVA] 13. 추상클래스 & 인터페이스

최재원's avatar
Feb 17, 2025
[JAVA] 13. 추상클래스 & 인터페이스
notion image

1. 추상클래스

notion image
package ex07.ch01; abstract class 판사 { public void 심문() { System.out.println("판사는 심문한다"); } } class 왕비 extends 판사 { } class 왕 extends 판사 { } abstract class 증인 { public abstract void 대답(); } class 엘리스 extends 증인 { @Override public void 대답() { System.out.println("엘리스는 대답한다"); } } class 모자장수 extends 증인 { public void 대답() { System.out.println("모자장수는 대답한다"); } } class 토끼 extends 증인 { @Override public void 대답() { System.out.println("토끼는 대답한다"); } } class Game { public void 심문(판사 u) { u.심문(); } public void 대답(증인 u) { u.대답(); } } public class AliceApp { public static void main(String[] args) { Game g = new Game(); 엘리스 s = new 엘리스(); g.대답(s); } }
notion image

2. 인터페이스

notion image
notion image
public interface 인터페이스_이름 { 반환형 추상메서드(...); }
package ex07.ch01; /* 삼성 리모컨, 엘지 리모컨 기능: on, off */ // 인터페이스 - 강제화시킴 interface Remocon { // 추상메서드는 무조건 public(접근제어자), abstract가 기본, new 불가능! public abstract void on(); // public, abstract 생략 void off(); } class SamsungRemocon implements Remocon { @Override public void on() { System.out.println("삼성 리모컨 ON"); } @Override public void off() { System.out.println("삼성 리모컨 OFF"); } } class LGRemocon implements Remocon { @Override public void on() { System.out.println("엘지 리모컨 ON"); } @Override public void off() { System.out.println("엘지 리모컨 OFF"); } } public class Inter01 { static void start(Remocon r) { r.on(); } public static void main(String[] args) { Remocon lg = new LGRemocon(); start(lg); } }
자바 복습 / 연습 문제

3. 영화 예매 프로그램

package test; import java.util.ArrayList; import java.util.Scanner; class Movie { private String title; private String[] seats; // 1차원 배열로 좌석 관리 public Movie(String title, int seatCount) { this.title = title; this.seats = new String[seatCount]; // 좌석 배열 생성 for (int i = 0; i < seatCount; i++) { seats[i] = "A" + (i + 1); // 좌석 번호 저장 (예: A1, A2, A3 ...) } } public String getTitle() { return title; } public void showSeats() { System.out.println("\n=== [" + title + "] 좌석 목록 ==="); for (String seat : seats) { if (seat.equals("X")) { System.out.print("[예약됨] "); } else { System.out.print("[" + seat + "] "); } } System.out.println(); // 줄 바꿈 } public boolean reserveSeat(String seatNumber) { for (int i = 0; i < seats.length; i++) { if (seats[i].equals(seatNumber)) { seats[i] = "X"; // 예약 완료 표시 System.out.println(seatNumber + " 좌석이 예약되었습니다."); return true; } } System.out.println("잘못된 좌석 번호이거나 이미 예약된 좌석입니다."); return false; } } public class MovieReservationSystem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 영화 객체 생성 ArrayList<Movie> movies = new ArrayList<>(); movies.add(new Movie("인셉션", 5)); // 좌석 5개 movies.add(new Movie("어벤져스", 5)); movies.add(new Movie("인터스텔라", 5)); while (true) { System.out.println("\n=== 영화 예약 시스템 ==="); System.out.println("1. 영화 목록 보기"); System.out.println("2. 좌석 예약하기"); System.out.println("3. 종료"); System.out.print("메뉴 선택: "); int choice = scanner.nextInt(); scanner.nextLine(); // 개행 문자 처리 if (choice == 1) { System.out.println("\n=== 영화 목록 ==="); for (int i = 0; i < movies.size(); i++) { System.out.println((i + 1) + ". " + movies.get(i).getTitle()); } } else if (choice == 2) { System.out.println("\n=== 영화 목록 ==="); for (int i = 0; i < movies.size(); i++) { System.out.println((i + 1) + ". " + movies.get(i).getTitle()); } System.out.print("영화 번호 선택: "); int movieChoice = scanner.nextInt(); scanner.nextLine(); // 개행 문자 처리 if (movieChoice < 1 || movieChoice > movies.size()) { System.out.println("잘못된 선택입니다."); continue; } Movie selectedMovie = movies.get(movieChoice - 1); selectedMovie.showSeats(); System.out.print("예약할 좌석 번호 입력 (예: A1): "); String seatNumber = scanner.nextLine(); selectedMovie.reserveSeat(seatNumber); } else if (choice == 3) { System.out.println("프로그램을 종료합니다."); break; } else { System.out.println("잘못된 입력입니다."); } } scanner.close(); } }

 
Share article

jjack1