DAY 18 상속

NA YE SOM·2023년 7월 24일
0

<오전>
09_ 상속

<오후>
평가

<보충>
객체 배열


상속 : 부모와 자식 클래스, 부모가 가지고 있는걸 자식에게 주는것

클래스를 이 관계로 만들기


-> 반환타입 없음, 파라미터 없음

클래스와 클래스의 관계를 보는 문제

-> 학생도 사람이니까 eat, sleep 할 수있게 만들기


-> 슈퍼클래스(위)
-> 서브클래스(아래)


-> sup(위) sub(아래)


-> person 하위클래스
-> extends : 확장했다. 기능을 넓혔다
(person의 기능을 확장한 student , person 의 기능을 가지고 있는 student)

person의 기능 2개, studnet의 기능 1개


-> 현재 생성자 만든적이 없으니 : 디폴트 생성자 사용해서 만들기


-> person것을 부를 수 있게 되어있음

-> eat, sleep은 상속받아서 사용할 수 있는 메소드, study는 내것


하이브리드 : 기름, 전기모터로도 움직일 수 있는 자동차


-> 4번(부모가 둘이어야 함):문법상 지원 안됨

다중상속 불가능(부모를 두가지로 두는 것)


-> Ev로 두든 EngineCar을 두든 상관없음
(3. 기름넣기를 기본, 충전은 본인이 하면됨)

-> '다이아몬드 상속'으로 문제 생김


-> C++ 언어는 다중상속지원함(문법의 어려움 있음)

99에서 channel 올리면 0으로 됨


-> channel : cycle 관계


외부로부터 파라미터를 받아와서 해당 vol에 전달해줌

Remocon을 가질 수 있는 채널


-> tv가 자식임

-> tv는 텅 비었지만 리모콘을 상속받았기 때문에

만약) 구현하라고 하면 밑에처럼 하는게 좋음


-> tv가 remocon가질 수 있음

상속 관계

GUN 부모 Soldier 자식

-> has a 관계는 상속으로 잘 안하고 필드로 넣어버리는 경우가 많음

수업시간에는 is a 관계 : 상속개념으로 , has a 관계는 상속으로 대부분 만들지 않는다.


person과 student에 살 붙이기

-> person과 student에 각각 2개씩 생성자 줌

student 부모꺼 사용가능 -> getName사용가능

학생이름을 준 적이 없으니 getName 은 다 "null"임


-> Person()은 자바가 부름
-> 왜 person이 호출되었는가?

person부모 student 자식

-> 자식(student)가 태어나려면
먼저

부모(person)이 태어나야한다.
-> 자식이 생성될 때, 반드시 부모가 먼저 생성되어야 한다.
-> 코드 유무와 상관없이(부모를 생성하겠다하는 코드를 넣은 적 없어도)

-> 자바에 의해서 부모(person)이 먼저 만들어지고 자식(studnet)가 만들어진다.


-> 순서지키기 !

서브클래스가 만들어진다 => 서브 클래스의 생성자가 만들어진다는 뜻


-> 생성자의 파라미터가 없는 것 (디폴트 생성자)

person이라고 부르지 않고 생성자끼리는 super라고 부름

student는 person이다.
이름의 전달이 아직없음
-> 이름을 가진 학생을 만들기


-> super 클래스 생성자 호출을 함


-> person의 string name의 생성자를 부른다 -> person을 부른다.


-> 호출되겠군 알수있음


notebooks is a computer : notebook은 자식


-> 배터리 용량이 얼마짜리 computer


-> 동작가능하도록 computer와 notebook내용채우기

컴퓨터가 처리해주는 것, model은 내가 처리 할 수 없고 배터리는 내가 처리함

-> battery의 getter,setter 필요함


-> 필드에 전달해서 처리하자

->
super의 호출은 "먼저" 있어야 함

model 전달해주면 컴퓨터 생성자 먼저 채워지고 돌아와서 배터리 채워짐

안지키면 오류남)생성자 호출시 주의해서 하기!


5, 6교시 평가


오버라이드(Override)

cafelatte가 espresso 가지고 있는것
가지고 있는 건 -> 상속 가능


-> 에스프레소(부모) 가 가지고 있는 메소드 모두 호출가능능


-> 라떼 메소드 taste있음(부모것)

-> 카페라떼 맛은 다르면 다시 만들기


-> 부모의 메소드를 자식은 가져다 쓸 수 있지만 여기서는 부모것을 사용하기 부적절해서 taste다시 만듦

@Annotation(애너테이션) : 이 메소드는 슈퍼클래스에도 있는데 내가 또 만든거다라고 명시함


-> 위치 : public 윗줄


-> 반환타입, (파라미터) 하나라도 다르게 만들면 안됨!

-> 똑같지 않으면 오류남

★면접) 메소드 오버로딩과 메소드 오버라이딩에 대해서 말씀해 보시오

1. 메소드 오버로딩(overloading) : 똑같은 메소드 여러개 만들 수있다

2. 메소드 오버라이딩(overriding) : 슈퍼 클래스의 메소드를 서브 클래스가 다시 만든다

직접 전부 만드는 것 : 하드코딩하고 있음
-> 다 적지 않고 일부 코드는 eclipse에 맡기기(실무에서도 같음)

profile
개발자 velog

0개의 댓글