JAVA/실습

32. [ JAVA ] 상속: 예시

천재단미 2024. 12. 16. 13:42
728x90
반응형

상속- 예시

 

문제: 온라인 스트리밍 서비스 관리 시스템

1. 다음과 같은 3단계 상속 구조를 가진 클래스들을 구현하세요

  • Content 클래스 (최상위 클래스)
  • 속성: (분 단위)
  • 메서드:
  • void play()
  • void displayInfo()
  • Video 클래스 (Content를 상속)
  • 추가 속성:
  • String resolution
  • 메서드:
  • void adjustResolution(String newResolution)
  • Movie 클래스 (Video를 상속)
  • 추가 속성:
  • String director
  • int releaseYear
  • 메서드:
  • void displayCast()
    2. 각 클래스에서 다음 요구사항을 구현하세요:
    3. 모든 클래스는 적절한 생성자를 가져야 합니다.
    4. play() 메서드를 각 클래스에서 오버라이드하세요.
    5. displayInfo() 메서드를 각 클래스에서 오버라이드하여 해당 클래스의 모든 속성을 출력하게 만드세요.
    6. Movie 클래스에서 모든 상위 클래스의 메서드를 호출하는 fullDisplay() 메서드를 구현하세요.
    7. Main 클래스에서 Movie 객체를 생성하고 모든 메서드를 호출하여 테스트하세요.

3-1





package entety;

public class Content {
    // 제목
    protected String title;
    // 재생 시간
    protected int duration;




 

3-2
3-3

 





package entety;

public class Content {
    // 제목
    protected String title;
    // 재생 시간
    protected int duration;

    public Content() {                                                                             // 클래스 생성자 생성
    }

     // title과 duration을 초기화
    public Content(String title, int duration) {                                          // 생성자 생성
        this.title = title;
        this.duration = duration;
        
    }



3-4
3

 




package entety;

public class Content {
    // 제목
    protected String title;
    // 재생 시간
    protected int duration;

    public Content() {
    }



        // title과 duration을 초기화
    public Content(String title, int duration) {
        this.title = title;
        this.duration = duration;

    }


        // "[title]을 재생합니다. 재생 시간: [duration]분" 메시지 출력

    public void play() {
        System.out.println(title +  " 을 재생합니다. 재생 시간 : " + duration + "  분");

    }


        // 제목과 재생 시간 정보 출력

   public void displayInfo() {
        System.out.println("제목 : " + title );
        System.out.println("재생 시간 : " + duration + "분");

    }
}



 

 

4-1




package entety;

public class Video extends Content{                                        //      extends Content     ( Content  를 상속합니다.

    // 해상도 : "720p", "1080p", "4K"

    protected String resolution;



4-2
4-3





    public Video() {
    }


    public Video(String title, int duration, String resolution) {
        // 부모 클래스의 생성자 호출
        super(title, duration);
        // resolution 초기화
        this.resolution = resolution;
    }




4-4




  @Override
    public void play() {
        // 부모 클래스의 play() 메서드 호출
        super.play();
        // "[resolution] 해상도로 재생합니다." 메시지 추가 출력
        System.out.println(resolution + "해상도로 재생합니다.");
    }
   @Override
    public void displayInfo() {
        // 부모 클래스의 displayInfo() 메서드 호출
        super.displayInf();
        // 해상도 정보 추가 출력
        System.out.println("해상도 : " + resolution );
    }



4-5

 




    }
    public void adjustResolution(String newResolution) {
        // resolution을 newResolution으로 변경
        resolution =newResolution;
        System.out.println("해상도가" + newResolution + "로 변경되었습니다." );
        // "해상도가 [newResolution]로 변경되었습니다." 메시지 출력
    }



4




package entety;

public class Video extends Content{

    // 해상도 : "720p", "1080p", "4K"

    protected String resolution;

    public Video() {
    }


    public Video(String title, int duration, String resolution) {
        // 부모 클래스의 생성자 호출
        super(title, duration);
        // resolution 초기화
        this.resolution = resolution;
    }


    @Override
    public void play() {
        // 부모 클래스의 play() 메서드 호출
        super.play();
        // "[resolution] 해상도로 재생합니다." 메시지 추가 출력
        System.out.println(resolution + "해상도로 재생합니다.");
    }
   @Override
    public void displayInfo() {
        // 부모 클래스의 displayInfo() 메서드 호출
        super.displayInf();
        // 해상도 정보 추가 출력
        System.out.println("해상도 : " + resolution );
    }
    public void adjustResolution(String newResolution) {
        // resolution을 newResolution으로 변경
        resolution =newResolution;
        System.out.println("해상도가" + newResolution + "로 변경되었습니다." );
        // "해상도가 [newResolution]로 변경되었습니다." 메시지 출력
    }

}



 

5-1-2




package entety;

public class Movie extends Video {
    // 감독 이름
    private String director;
    // 개봉년도
    private int releaseYear;



5-1-3
5-1-4

 

 






package entety;

public class Movie extends Video {
    // 감독 이름
    private String director;
    // 개봉년도
    private int releaseYear;


// 부모 클래스의 생성자 호출

    public Movie() {
    }


        // director와 releaseYear 초기화

    public Movie(String title, int duration, String resolution, String director, int releaseYear) {
        super(title, duration, resolution);        
        this.director = director;
        this.releaseYear = releaseYear;
    }



5-1-5

 




    @Override
    public void play() {

        // 부모 클래스의 play() 메서드 호출
        super.play();

        // "감독: [director], 개봉년도: [releaseYear]" 메시지 추가 출력

        System.out.println("감독 : " + director +" , 개봉년도 : " + releaseYear);
    }

     @Override
    public void displayInfo() {

        // 부모 클래스의 displayInfo() 메서드 호출

        super. displayInfo();

        // 감독과 개봉년도 정보 추가 출력

        System.out.println("감독 : " + director);
        System.out.println("개봉년도 : " + releaseYear);
    }




5-1-6

 




    public void displayCast() {
        // "영화 [title]의 출연진 정보입니다." 메시지 출력
        // (실제 출연진 정보는 구현하지 않음)
        System.out.println("영화 " + title + "의 출연진 정보입니다.");
    }

    public void fullDisplay() {
        // displayInfo() 메서드 호출

        displayInfo();

        // play() 메서드 호출

        play();

        // displayCast() 메서드 호출

        displayCast();

        // adjustResolution() 메서드를 호출하여 해상도를 "4K"로 변경

        adjustResolution("4K");
    }



 

5-1
5-2




package entety;

public class Movie extends Video {
    // 감독 이름
    private String director;
    // 개봉년도
    private int releaseYear;


// 부모 클래스의 생성자 호출

    public Movie() {
    }


        // director와 releaseYear 초기화

    public Movie(String title, int duration, String resolution, String director, int releaseYear) {
        super(title, duration, resolution);        
        this.director = director;
        this.releaseYear = releaseYear;
    }


    @Override
    public void play() {

        // 부모 클래스의 play() 메서드 호출
        super.play();

        // "감독: [director], 개봉년도: [releaseYear]" 메시지 추가 출력

        System.out.println("감독 : " + director +" , 개봉년도 : " + releaseYear);
    }

     @Override
    public void displayInfo() {

        // 부모 클래스의 displayInfo() 메서드 호출

        super. displayInfo();

        // 감독과 개봉년도 정보 추가 출력

        System.out.println("감독 : " + director);
        System.out.println("개봉년도 : " + releaseYear);
    }

    public void displayCast() {
        // "영화 [title]의 출연진 정보입니다." 메시지 출력
        // (실제 출연진 정보는 구현하지 않음)
        System.out.println("영화 " + title + "의 출연진 정보입니다.");
    }

    public void fullDisplay() {
        // displayInfo() 메서드 호출

        displayInfo();

        // play() 메서드 호출

        play();

        // displayCast() 메서드 호출

        displayCast();

        // adjustResolution() 메서드를 호출하여 해상도를 "4K"로 변경

        adjustResolution("4K");
    }
}




 

 

 

1

 



import entety.Movie;

public class Main {
    public static void main(String[] args) {
       Movie m1 = new Movie("재밌는영화"120"1080p", "홍길동"2024);
    m1.fullDisplay();
    }
}



2

 

728x90
반응형
home
}