1. 아래의 코드가 실행되도록 수정하세요.

  - Dog, Cat, Animal(부모) 클래스 추가
  - animalBox 제네릭 클래스 추가
  - animalBox.setValue(객체) 호출후 animalBox.getValue() 출력시 아래 출력예시와 같이 나오도록 코드 수정

 

// (출력예시)

// animalBox.getValue() = Animal{name='고양이', age=12}
// animalBox.getValue() = Animal{name='강아지', age=13}

 

package generic.quiz;

public class Main {
    public static void main(String[] args) {
        
        Animal animal = new Animal("동물", 0);
        Cat cat = new Cat("고양이", 12);
        Dog dog = new Dog("강아지", 13);


        AnimalBox<Animal> animalBox = new AnimalBox<>();
        animalBox.setValue(cat);
        System.out.println("animalBox.getValue() = " + animalBox.getValue()); // animalBox.getValue() = Animal{name='고양이', age=12}
        animalBox.setValue(dog);
        System.out.println("animalBox.getValue() = " + animalBox.getValue()); // animalBox.getValue() = Animal{name='강아지', age=13}
    }
}

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 메서드 실습 문제  (0) 2024.07.31
다형성 실습 문제  (0) 2024.07.24
상속 실습 문제  (0) 2024.07.22
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15

1. useNoticeBoard, useuseNoticeBoard, useInformationBoard 메서드와 같이 중복되는 코드를 useBoard메서드를 구현하여 중복 제거
2. 게임 게시판(gameBoard) 클래스 추가

(출력예시)

공지사항 게시판 사용
공지사항 게시판의 글이 정상적으로 추가 되었습니다.

자유 게시판 사용
자유 게시판의 글이 정상적으로 추가 되었습니다.

정보 게시판 사용
자유 게시판의 글이 정상적으로 추가 되었습니다.

게임 게시판 사용
게임 게시판의 글이 정상적으로 추가 되었습니다.
package abstract1.quiz;

public class Main {
    public static void main(String[] args) {
        NoticeBoard noticeBoard = new NoticeBoard();
        FreeBoard freeBoard = new FreeBoard();
        InformationBoard informationBoard = new InformationBoard();

        useNoticeBoard(noticeBoard);
        useuseNoticeBoard(freeBoard);
        useInformationBoard(informationBoard);


        // TODO 한개의 메서드를 통해 동작 처리
//        useBoard(noticeBoard);
//        useBoard(freeBoard);
//        useBoard(informationBoard);
//        useBoard(gameBoard);
    }
    public static void useNoticeBoard (NoticeBoard noticeBoard) {
        System.out.println("공지사항 게시판 사용");
        noticeBoard.createBoard();
        System.out.println("");
    }

    public static void useuseNoticeBoard (FreeBoard freeBoard) {
        System.out.println("자유 게시판 사용");
        freeBoard.createBoard();
        System.out.println("");
    }

    public static void useInformationBoard (InformationBoard informationBoard) {
        System.out.println("정보 게시판 사용");
        informationBoard.createBoard();
        System.out.println("");
    }

    //TODO 출력예시와 같이 나오도록 아래 메서드 구현(다형적 참조 사용)
    public static void useBoard (Board board) {
        board.createBoard();
    }
}
package abstract1.quiz;

public class Board {
    public void createBoard () {
        System.out.println("");
    }
}
package abstract1.quiz;

public class FreeBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}
package abstract1.quiz;

public class InformationBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}
package abstract1.quiz;

public class NoticeBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}

 

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 메서드 실습 문제  (0) 2024.07.31
제네릭 실습 문제  (0) 2024.07.30
상속 실습 문제  (0) 2024.07.22
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15

추상클래스, 추상메서드 설명으로 옳지 않은것은?
1. 추상 클래스를 선언할때 abstract 키워드를 붙여주면 된다.
2. 추상 클래스는 직접 인스턴스 생성을 못한다.
3. 추상 클래스는 일반 클래스와 동일하게 생성자와 본체가 구현되어 있는 메서드를 사용할 수 없다.
4. 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다.
5. 추상 메서드는 상속 받은 자식 클래스에서 반드시 오버라이딩 해서 사용해야 한다.

 

3

'자바 문제 > 이론' 카테고리의 다른 글

제네릭 이론 문제1  (0) 2024.07.31
instanceof 이론 문제  (0) 2024.07.23
상속 이론 문제  (0) 2024.07.17
static  (0) 2024.07.15
접근제어자  (0) 2024.07.11

다형성

- 다형적 참조의 핵심은 부모는 자식을 품을 수 있다는 것이다.
- 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있다.
- 다형적 참조시 오버라이딩 된 메서드가 항상 우선권을 가진다.

업캐스팅

- 자식 클래스 타입에서 부모 클래스 타입으로 형 변환
- 자식 인스턴스를 생성하면 부모도 같이 생성되기 때문에 업캐스팅시 문제가 발생하지 않는다.
- 그래서 업캐스팅 사용시 생략이 가능하다.

다운캐스팅

- 부모 클래스에서 자식 클래스 타입으로 형 변환
- 부모 인스턴스를 생성시 하위 자식은 생성되지 않기때문에 문제가 발생한다.
- 다운캐스팅 사용시 생략할 수 없다.

 

Child child = new Child();

// 업캐스팅
Parent parent = (Parents) child;
Parent parent = child; // 업캐스팅시 () 생략 권장

// 다운캐스팅
Child child1 = (Child) parent;

 

추상 클래스

- 추상 클래스를 선언할때 abstract 키워드를 붙여주면 된다.
- 추상 클래스는 직접 인스턴스 생성을 못한다.
  ex) AbstractA abstract = new AbstractA() -> 불가능
- 추상 클래스는 일반 클래스와 동일하게 생성자, 인스턴스 멤버변수, 메서드 선언이 가능하다.

 

추상 메서드

- 추상메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다.
- 추상 메서드는 상속 받은 자식 클래스에서 반드시 오버라이딩 해서 사용해야 한다.

 

추상클래스는 인스턴스 생성을 못하는 이유

- 동작이 정의되어 있지 않은 추상 메서드를 포함하고 있기 때문에
- 추상클래스를 상속받아 자식 클래스들이 각자의 방식으로 구현하는게 목적이기 때문에

'인강 > 자바(기본편)' 카테고리의 다른 글

상속  (0) 2024.07.22
this, 생성자  (0) 2024.07.02
변수와 초기화  (0) 2024.07.02
기본형 vs 참조형  (0) 2024.07.01
클래스와 데이터  (0) 2024.07.01

다음 코드에서 문법적인 오류가 발생하거나 false로 출력되는 문장을 모두 선택하세요. (중복허용)

Parent parentA = new Parent(); // 1
Parent parentB = new Child(); // 2
Child childA = new Parent(); // 3
Child childB = new Child(); // 4

System.out.println(parentA instanceof Parent); // 5
System.out.println(parentB instanceof Parent); // 6
System.out.println(childA instanceof Parent); // 7
System.out.println(childB instanceof Parent); // 8

System.out.println(parentA instanceof Child); // 9
System.out.println(parentB instanceof Child); // 10
System.out.println(childA instanceof Child); // 11
System.out.println(childB instanceof Child); // 12

 

3, 7, 9, 11

'자바 문제 > 이론' 카테고리의 다른 글

제네릭 이론 문제1  (0) 2024.07.31
추상클래스 이론 문제  (0) 2024.07.24
상속 이론 문제  (0) 2024.07.17
static  (0) 2024.07.15
접근제어자  (0) 2024.07.11

1. 공지사항, 자유게시판, 정보게시판 클래스에서 중복적으로 사용되는 변수와 메서드를 부모클래스(Board)를 추가하여 코드를 수정하세요.
2. 게임게시판(gameBoard)을 추가
3. 모든 자식클래스에서 createBoard메서드를 overriding하여 "??? 게시판의 글이 정상적으로 추가 되었습니다."라고 재정의하기

(출력예시)

공지사항 게시판 사용
정상적으로 추가 되었습니다.
조회에 성공했습니다.
정상적으로 수정 되었습니다.
정상적으로 삭제 되었습니다

자유 게시판 사용
정상적으로 추가 되었습니다.
조회에 성공했습니다.
정상적으로 수정 되었습니다.
정상적으로 삭제 되었습니다

정보 게시판 사용
정상적으로 추가 되었습니다.
조회에 성공했습니다.
정상적으로 수정 되었습니다.
정상적으로 삭제 되었습니다

게임 게시판 사용
정상적으로 추가 되었습니다.
조회에 성공했습니다.
정상적으로 수정 되었습니다.
정상적으로 삭제 되었습니다

 

package extends1.quiz;

public class Main {
    public static void main(String[] args) {
    
        NoticeBoard noticeBoard = new NoticeBoard();
        FreeBoard freeBoard = new FreeBoard();
        InformationBoard informationBoard = new InformationBoard();
        //GameBoard gameBoard = new GameBoard();

        System.out.println("공지사항 게시판 사용");
        noticeBoard.createBoard();
        noticeBoard.readBoard();
        noticeBoard.updateBoard();
        noticeBoard.deleteBoard();
        System.out.println("");

        System.out.println("자유 게시판 사용");
        freeBoard.createBoard();
        freeBoard.readBoard();
        freeBoard.updateBoard();
        freeBoard.deleteBoard();
        System.out.println("");

        System.out.println("정보 게시판 사용");
        informationBoard.createBoard();
        informationBoard.readBoard();
        informationBoard.updateBoard();
        informationBoard.deleteBoard();
        System.out.println("");

        System.out.println("게임 게시판 사용");
//        gameBoard.createBoard();
//        gameBoard.readBoard();
//        gameBoard.updateBoard();
//        gameBoard.deleteBoard();

    }
}

 

package extends1.quiz;

public class FreeBoard{

    public int id;
    public String title;
    public String content;

    public void createBoard() {
        System.out.println("정상적으로 추가 되었습니다.");
    }

    public void readBoard() {
        System.out.println("조회에 성공했습니다.");
    }

    public void updateBoard() {
        System.out.println("정상적으로 수정 되었습니다.");
    }

    public void deleteBoard() {
        System.out.println("정상적으로 삭제 되었습니다");
    }
}

 

package extends1.quiz;

public class InformationBoard{
    public int id;
    public String title;
    public String content;

    public void createBoard() {
        System.out.println("정상적으로 추가 되었습니다.");
    }

    public void readBoard() {
        System.out.println("조회에 성공했습니다.");
    }

    public void updateBoard() {
        System.out.println("정상적으로 수정 되었습니다.");
    }

    public void deleteBoard() {
        System.out.println("정상적으로 삭제 되었습니다");
    }
}

 

package extends1.quiz;

public class NoticeBoard{

    public int id;
    public String title;
    public String content;

    public void createBoard() {
        System.out.println("정상적으로 추가 되었습니다.");
    }

    public void readBoard() {
        System.out.println("조회에 성공했습니다.");
    }

    public void updateBoard() {
        System.out.println("정상적으로 수정 되었습니다.");
    }

    public void deleteBoard() {
        System.out.println("정상적으로 삭제 되었습니다");
    }
}

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 실습 문제  (0) 2024.07.30
다형성 실습 문제  (0) 2024.07.24
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15
접근제어자  (0) 2024.07.10
부모 클래스(슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
자식 클래스(서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스

상속을 사용하는 이유

- 공통으로 사용되는 속성 혹은 기능을 상위 클래스에 정의하여 공유함으로써 중복 코드를 줄일 수 있다.

상속

- 자식클래스는 1개의 부모클래스만 상속받을 수 있다.
- 부모 클래스로부터 상속받은 필드나 메서드를 접근할때는 super 키워드를 사용한다.
- 자식 객체에서 기능을 호출시 자식 객체에서 해당 기능이 있는지 찾고 찾지못한다면 부모 객체에서 찾는다.
- 자바의 모든 클래스는 최상위 클래스인 Object클래스를 상속받는다.
- 자식 클래스의 인스턴스 생성시 부모 인스턴스도 같이 생성된다.

- 자식 인스턴스 생성시 부모 생성자가 호출된다.(하지만 기본 생성자는 생략 가능 -> 자바에서 자동으로 만들어 주기 때문)

 

메서드 오버라이딩을 하는 이유

- 부모 클래스의 메서드를 자식 클래스에서 재정의함으로써 다형성을 구현할 수 있다.- 부모 클래스의 메서드가 자식 클래스의 요구사항에 맞지 않은 경우 자식 클래스에서 해당 메서드를 재정의 할 수 있다.

 

메서드 오버라이딩 조건

- 메서드 이름이 같아야 한다.

- 메서드 매개변수(파라미터) 타입, 순서, 개수가 같아야 한다.

- 반환타입이 같아야 한다.

- 상위 클래스의 메서드보다 더 많은 체크 예외를 선언할 수 없다.

- final 메서드는 재정의를 금지한다.

- 부모 클래스의 메서드보다 접근제어자가 제한적이어서는 안된다.

    (ex)

    부모클래스 : protected, 자식클래스 : private, default  -> 불가능   

    부모클래스 : protected , 자식클래스 : public, protected  -> 가능

 

접근 제어자 이론 문제

https://rnwns2.tistory.com/145

 

접근 제어자 실습 문제

 

'인강 > 자바(기본편)' 카테고리의 다른 글

다형성  (0) 2024.07.23
this, 생성자  (0) 2024.07.02
변수와 초기화  (0) 2024.07.02
기본형 vs 참조형  (0) 2024.07.01
클래스와 데이터  (0) 2024.07.01

상속에 대한 설명으로 틀린것은?(중복허용)
1. 자식클래스는 2개 이상의 부모클래스를 상속받을 수 있다.
2. 부모 클래스로부터 상속받은 필드나 메서드를 접근할때는 super 키워드를 사용한다.
3. 부모 클래스와 자식 클래스의 id라는 변수명을 둘다 가지고 있을때 자식 인스턴스에서 id에 접근시 부모클래스의 id변수에 먼저 접근한다.
4. 자바의 모든 클래스는 최상위 클래스인 Object클래스를 상속받는다.
5. 자식 클래스의 인스턴스 생성시 부모 인스턴스도 같이 생성된다.

1, 3

 

오버라이딩에 대한 설명으로 틀린것은?

1. 메서드 이름이 같아야 한다.

2. 메서드 매개변수(파라미터) 타입, 순서, 개수가 같아야 한다.

3. 반환타입이 같아야 한다.

4. 상위 클래스의 메서드보다 더 많은 체크 예외를 선언할 수 없다.

5. final 메서드는 재정의할때 접근제어자를 public으로 해야한다.

 

5

'자바 문제 > 이론' 카테고리의 다른 글

제네릭 이론 문제1  (0) 2024.07.31
추상클래스 이론 문제  (0) 2024.07.24
instanceof 이론 문제  (0) 2024.07.23
static  (0) 2024.07.15
접근제어자  (0) 2024.07.11

+ Recent posts