🎈상속(inheritance)이란?
**기존 클래스를 확장하여 새로운 클래스를 작성하는 기법
✔ 새로운 클래스 뒤에 extends와 확장할 클래스를 적어서 표현
✔ ex) class laptop extends와 확장할 클래스를 적어서 표현
✔ 자식클래스는 부모클래스의 모든 멤버를 상속(생성자, 초기화 블록 제외)
✔ 같은 내용의 코드를 한곳에서 관리함으로써 코드의 중복이 줄어듦
✔ 단일 상속만 가능
-새로운 클래스 뒤에 extends 키워드를 붙여, 상속관계를 나타낼 수 있다.
-상속은 같은 내용의 코드를 한 곳에 관리하므로서
코드의 중복(redundance=리던댄스)이 줄어들 게 된다.
-또 자식클래스는 하나의 부모클래스만 상속 받을 수 있다.
<클래스 간 관계> 2가지 (상속 과 포함)
-상속 관계: is - a 관계 [무엇은 무엇이다]
✔ 사람은 개발자이다 x
✔ 개발자는 사람이다 0
✔ 사람: 부모 클래스 - 개발자: 자식 클래스
포함 관계: has - a 관계
✔ 한 클래스를 다른 클래스의 참조변수로 사용하는 경우
앞에서 배운 오버로딩과 다른
-다형성과 상관있는 다른 개념인 오버라이딩
✨ 다형성(polymorphism)
✔한 객체가 여러 가지 타입을 가질 수 있는 것
✔부모클래스 타입의 참조 변수로 자식클래스 인스턴스 참조
🎈오버라이딩
✨상속 (Inheritance) [인헤리턴스]
✔ 기존 클래스에 기능 추가 및 재정의하여 새로운 클래스를 정의
-부모 클래스: 상속 대상이 되는 기존 클래스 = 상위클래스, 기초클래스
-자식 크래스: 기존 클래스를 상속하는 클래스 = 하위크래스, 파생클래스
✔ 부모 클래스의 필드(=값)와 메소드가 상속됨 :
=> 생성자, 초기화 블록은 상속되지 않음
⏺ 오버라이딩(overriding)이란?
★ 부모클래스로부터 상속받은 메서드의 내용을 변경하는 것
✔ 이름, 매개변수, 반환 타입이 같아야 함
✔ 접근제어자를 부모보다 좁은 범위로 할 수 없음
✔ 부모클래스의 메서드보다 많은 수의 예외를 선언할 수 없음
✔ 인스턴스 메서드를 static 제어자로 바꿀 수 없음
🎈⏺ 오버라이딩 vs 오버로딩 ⏺🎈
-오버라이딩(overriding):
부모클래스에 존재하는 메서드를
자식클래스에서 재정의 하는 것(modify)=수정
//(더 알맞도록) 수정[변경]하다
⏺🎈super와 super()🎈⏺
-슈퍼키워드와 슈퍼메서드()
=> 마치 this와 this()메소드 관계와 비슷하다.
1. super
:자식클래스에서 부모클래스로부터 상속받은 멤버를 참조하는데
사용되는 참조변수
**다형성
여러가지 형태를 가질 수 있는 성질
: 부모클래스 타입의 참조변수로
자식클래스의 인스턴스(dog, cat, pig)를 참조 가능
package Chapter7;
public class PolymorphismExample {
public static void main(String[] arge) {
Animal dog = new Dog();
Animal cat = new Cat();
Animal pig = new Plg();
}
}
⏺ 참조 변수와 다형성
✔ 서로 상속관계에 있는 클래스 사이에서만 형변환이 가능
✔ 메서드 매개변수가 같은 부모 클래스라면
부모 클래스 타입을 매개변수 타입으로 선언 가능
✔ 배열 혹은 자료구조에 부모 클래스로 데이터 타입으로 지정하면
여러 자식 클래스를 저장 가능
✔ instanceof 연산자로 참조변수가
참조하는 인스턴스의 실제 타입을 확인하는데 사용 가능

**Package란?
:물리적으로 관련이 있는 클래스 파일들을 포함하는 하나의 디렉토리
✔ 계층구조를 .(점)으로 구분
✔ 모든 클래스는 반드시 한 패키지에 속해야 함
✔ 같은 클래스 이름이라도 서로 다른 패키지에 속하면 구별이 가능
**Import문
:Java컴파일러에게 소스 파일에 사용된 클래스의 패키지에 대한
정보를 제공하는 것
✔ import문으로 사용하고자 하는 class파일의 패키지를 명시해주면
클래스 사용 시 생략 가능
✔ import문에 package.을 하더라도 하위 패키지의 모든 클래스를
포함하는 것은 아님
✔ 주로 하위 패키지.*로 구체적으로 명시
✔ import static문으로 작성하면 클래스 사용 시, 클래스 생략 가능
<아래 그림파일 참고>

**제어자
변수, 메서드, 클래스 등에 접근이나 어떤 기능적인 부분에 대해
지정해주는 것
✔ 하나의 대상(변수, 메서드, 클래스)에 대해
여러 제어자를 조합하여 사용할 수 있으며, 접근제어자는 한가지만 가능
✔ 각 대상의 선언부에 함께 표시
**제어자의 종류
-접근 제어자 = 접근을 제한하는 제어자
: public, protected, default, private
-그 외의 제어자 = 기타제어자
: static, final, abstract, native, transient,
synchronized, volatile, strictfp
제어자의 특징
static -
공통적인, 인스턴스가 아닌 클래스에 관련 있음을 알리는 제어자
: 멤버변수, 메서드, 초기화 블럭에 사용 가능
인스턴스를 생성하지 않고 호출이 가능
**final - 마지막의, 변경할 수 없도록 하는 제어자
✔ 클래스, 메서드, 멤버변수, 지역변수에 사용 가능
✔ 생성자를 통해 final이 붙은 멤버변수를 초기화 할 수 있음
**abstract - 추상의, 대상이 미완성임을 알리는 제어자
✔ 클래스와 메서드에 사용 가능
✔ 클래스에 사용하면 추상클래스(추상메서드가 포함된 크래스)
✔ 메서드에 사용하면 추상메서드(구현은 하지 않고 선언만 된 메서드)

⏺🎈 제어자 규칙 (에러를 발생시키지 않기위해 사용해야함)
✔ 클래스에 abstract와 final을 동시에 사용할 수 없다.
✔ 메서드에 static과 abstract를 같이 사용할 수 없다.
✔ abstract메서드의 접근제어자가 private면 안된다
✔ 메서드에 private과 final을 같이 사용할 필요는 없다.
: 긴밀한 관계가 있는 클래스를 클래스 안에 선언하여 사용하는 방법
✔ 내부클래스에서 외부클래스의 멤버들을 쉽게 가능
✔ 코드의 복잡성을 줄임
✔ 내부 클래스의 종류는 변수 선언 위치와 동일(인스턴스, static, 메서드 내부)
⏺ 내부클래스(cont.)
✔ 내부클래스 중에서 static클래스만 static멤버를 가질 수 있음
✔ final과 static이 동시에 붙은 변수는 상수, 모든 내부 클래스에 정의 가능
✔ 인스턴스 클래스
- 외부클래스의 인스턴스 멤버를 객체 생성 없이 접근 가능
- static클래스는 바로 접근 가능
✔ static 클래스
- 외부 클래스의 인스턴스 멤버를 객체 생성 후 접근 가능
- 인스턴스 클래스의 멤버변수는 객체 생성 후 접근 가능

⏺ 익명클래스
: 이름이 없는 클래스로 추상클래스 혹은 인터페이스를 바로 객체로 생성해서 반환
✔ 단 하나의 추상클래스 혹은 인터페이스를 바로 생성, 일회용 클래스
✔ 생성자가 없음
✔ 클래스 마지막에 ;(세미콜론)을 붙여 구현이 끝났음을 표현
✔ 인터페이스 혹은 추상 클래스의 미구현 메서드들 구현해야 함
⏺ Class에 abstract 제어자가 붙은 미완성인 클래스
✔ 추상메서드를 가진 클래스
✔ 클래스를 인스턴스화 할 수 없음
✔ 다중 상속 불가능
⏺ 선언부만 존재하고, 구현부가 없는 메서드
✔ 추상클래스를 상속받은 클래스에서는 추상메서드를 반드시 구현해야 함.
✔ 추상메서드를 포함하는 클래스는 반드시 추상 클래스여야 함

⏺⏺ 인터페이스(interface)란?
추상메서드, 디폴트 메서드, static메서드, 상수만 가진 클래스
✔ 추상클래스보다 추상화가 높은
✔ 다중 상속 가능
✔ 인스턴스 생성 불가
✔ 다형성이 적용됨
✔ 표준화 시켜 개발함으로써 개발자 간의 독립적인 개발이 가능(메서드만 공유하면 됨)
⏺ 인터페이스의 상속과 구현
✔ 인터페이스는 static상수만 정의 가능
✔ 조상클래스의 멤버변수와 충돌 가능성이 거의 없음
✔ 개발자 간에 기능을 제공하는 쪽과 사용하는 쪽이 존재
-기능을 사용하는 쪽에서는 인터페이스 선언부만 알면 됨

⏺ 디폴트 메서드(default method)
🎈 인터페이스에 구현 가능한 메서드
접근제어자는 public(생략가능), 반환 타입 앞에 default표기,
추상 메서드와 다르게 구현해야 함
디폴트메서드와 기존 메서드의 이름이 중복되면 충돌이 발생
여러 인터페이스의 디폴트 메서드 충돌 :
인터페이스를 구현한 클래스에서 오버라이딩
상위 클래스와 디폴트 메서드 충돌: 상위 클래스의 메서드가 상속됨

★ 차량, 탈것, 운송 수단 = vehicle [비히클]
⏺🎈 추상클래스 vs 인터페이스
-공통점
인스턴스화가 불가능
내부의 추상 메서드를 모두 구현해야 함.
-차이점
인터페이스는 다중 상속이 가능, 추상 클래스는 단일 상속만 가능
인터페이스는 제어자로 public static final 혹은
public abstract만 가능
**공통 기능과 사용 의도의 차이


-developer
(부동산) 개발업자개발 회사 개발자[개발 회사]
현상액
-Constructor : 건설하다 .생성자
(특히 자동차나 항공기) 제작자[제작 회사]
-condition : 조건
-gender
성, 성별
<과제1>


==============
<과제2 설명>



