1. Is~A 관계와 Has~A 관계란?
· is~a관계: '..은 ..이다' 의미를 지니며, "노트북은 컴퓨터이다", "전기자동차는 차이다" 예시와 같이 상속 관계의 형태를 가진다.
· has~a 관계: "CPU와 mainboard는 컴퓨터를 구성한다" 예시와 같이 포함/구성 관계의 형태를 가진다.
(is~a 조금이라도 의심스럽다면 has a로 표현)
2. 상속이란? ( UML로 표현해볼 것!)
· 부모클래스에서 선언된 필드와 메소드를 자식클래스가 그대로 물려받는 것을 상속이라 정의하며 키워드는 extends를 사용한다.
· 자식클래스는 부모클래스의 모든 특성을 지니며, 자식클래스는 추가적인 특성을 더해서 가질 수 있다.
(상속의 목적: 공통으로 되어 있는 내용을 한 개의 클래스로 작성하여 상속받아 사용)
· ex) 상속이 대상이 되는 클래스: Man class, 상속을 하는 클래스: BusinessMan class
3. 단일 상속과 다중 상속 이란?
· 단일 상속은 하나의 클래스가 단 하나의 클래스만을 상속하는 것이다. (java는 단일 상속만 가능)
· 다중 상속은 하나의 클래스가 여러개의 클래스를 상속하는 것이다.
· ex) 다중 상속은 C class가 A, B class 두 개를 상속 받을 수 있는 경우를 말한다.
4. 부모클래스와 자식클래스의 다른 용어와 호출관계를 설명하시오.
· 부모클래스는 상속이 되는 클래스이며, 상위/기초 클래스라 정의한다.
· 자식클래스는 상속을 하는 클래스이며, 하위/유도 클래스라 정의한다.
· new 연산자는 객체를 생성하여 메모리에 저장하는데 extends가 선언되었다면 부모클래스의 생성자 함수를 호출하여
부모클래스의 생성자, 함수들을 먼저 메모리에 저장한 후, 자식클래가 메모리에 저장된다.
(부모클래스 디폴트 생성자 실행 후, 자식클래스 디폴트 생성자 실행)
5. super 키워드와 this 키워드의 차이
· super 키워드는 부모 클래스의 생성자를 호출하며 this 키워드는 자기 자신의 생성자를 호출한다. (super키워드 더 좋은 방법)
· ex) private은 같은 클래스 내에서만 사용 가능하므로, 아래 예시와 같이 super 키워드를 사용하여 Man의 생성자를 호출
6. 다형성(Polymorphism)이란 무엇인가?
· 부모 = 자식(without 형변환), 부모 클래스는 자식 클래스를 참조하여 다형성 구현이 가능하다.
(쉽게 말해, 하나의 객체를 여러 가지 타입으로 선언하여 사용가능)
· ex) class A를 상속받는 class B, C, D 모두를 class A는 참조가능
7. 아래의 내용을 메모리 그리시오.
8. 아래 예시와 같이 성립되지 않는 이유에 대하여 메모리 그림으로 설명하시오.
· SmartPhone ph1 = new MobilePhone(); 객체 생성이 불가하다.
why? 부모클래스에는 자식클래스의 함수와 변수가 존재하지 않기 때문에 참조할 수 없다.
· MobilePhone ph2 = new SmartPhone(); 객체 생성은 가능하지만 함수사용은 불가하다.
why? 메모리에 부모클래스가 먼저 저장된 후, 자식클래스가 저장되기 때문에 객체 생성까지는 가능하지만
ph2는 Moblie 타입이기 때문에 Moblie까지만 사용가능하다.(smatr 함수에 접근 불가)
9. 참조변수의 형변환이란?
· 서로 상속관계에 있는 타입 간의 형변환만 가능하며, 자식클래스가 조상클래스를 참조하는 경우 컴파일 오류가 발생하지만
아래의 예시와 같이 형변환을 통해 접근할 수 있도록 해준다.
10. instanceof 연산자란?
· 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아볼 때 instanceof 연산자를 사용한다.
· 연산자를 기준으로 앞에는 객체, 뒤에는 클래스명이 위치하고, 사실관계를 확인하므로 true/false를 리턴한다.
(순서가 자식 = 부모 이면 true를 반환)
· 대표적인 활용의 예: 파라미터에 부모를 사용하고, 자식이 형변환이 되는지 안되는지 확인할 때 활용된다.
11. 메소드 오버라이딩이란?
· 상속관계에서 리턴타입, 함수명, 파라미터가 동일한 경우 자식클래스에서 재정의하여 사용하는 것을
메소드 오버라이딩이라 일컬으며, 이 때 부모 클래스가 아닌 상속하는 자식클래스의 구현내용을 실행한다.
(오버라이딩은 자식, 후손 따름!! 외우기!! 자식의 실행내용을 출력)
12. @Override에 대하여 설명하시오.
· @Override는 annotion 종류 중 하나이며, '부모클래스에서 오버라이드한 메소드이다' 라는 것을 지칭한다.
· 프로그래머 혹은 컴파일 시 '오버라이딩이다' 라고 명확하게 알려주는 표시이다.
13. Object 클래스에 대하여 설명하시오.
· Object class는 최상위 클래스이고, 데이터 멤버와 함수만을 가지며, 총 11개의 메소드로 구성되어있다. ex) toString()
· 상속하는 클래스가 없다면 Object class를 직접 상속하고 있으며,
다른 클래스를 상속하고 있다면 부모의 클래스는 이미 Object class를 상속하고 있으므로 간접적으로 상속하게 된다
* 컴파일러가 자동 실행하는 것!
1) 생성자가 하나라도 없다면 디폴트 생성자를 자동으로 생성.
2) 상속받은게 없다면 자동으로 Object 클래스를 상속
14. 아래와 같이 출력되는 이유를 하시오.
· 컴파일러에 의해 자동적으로 class A는 Object class를 상속받아 toString 함수를 호출하여 아래와 같이 사용된다.
15. class 이름 및 함수 에서 final 의 의미는?
· class에서의 final은 '해당 class를 상속받을 수 없다'는 의미를 지닌다.
· ex) Hello를 상속할 수 없다
· 함수에서의 final은 '해당 함수를 다른 class에서 오버라이딩 할 수 없다'는 의미를 지닌다.
· ex) play 메소드를 오버라이딩 할 수 없다
♣연습문제♣
· 참고: 출력 결과가 아래와 같이 나오도록 프로그래밍 하시오.
· 작성
'bitcamp > JAVA' 카테고리의 다른 글
interface와 추상클래스 (0) | 2021.01.18 |
---|---|
클래스의 상속과 오버라이딩_연습문제 (0) | 2021.01.17 |
배열_연습문제 (0) | 2021.01.17 |
배열 (0) | 2021.01.17 |
기타_연습문제 (0) | 2021.01.17 |