자바 공부 기록(7)-상속,오버라이드,일반 제어자
my code archive
article thumbnail
반응형

학원에서 필기 열심히 했으니까 올려줘야지ㅎㅎ

상속 (inheritance)

'클래스 간의 관계를 맺어줌'

-부모 클래스(parent class)

-자식 클래스(child class)

=>is a관계

ex) 고양이는(자식) is a 동물이다.(부모)
     체크카드는 is a 카드다.
     신용카드는 is a 카드다.

 

클래스가 부모&자식 (상속) 관계가 되면

-자식 클래스는 부모 클래스가 가진 재산(변수, 메서드 등등)을 물려받아서 사용 가능하다. -> 코드의 재사용이 가능하다!!

-공통 내용을 미리 제작해두고 여러 곳에서 재사용 하겠다. -> 코드 중복을 최소화!

 -자식 클래스는 부모 클래스 멤버를 자기 것인양 사용 가능하지만 부모 클래스는 자식 클래스가 직접 정의한

멤버에는 접근할 수 없다.

-상속 관계에서 자식 클래스는 항상 부모 클래스보다 멤버 갯수가 많거나 같다.

=>하지만!! 멤버 갯수가 많다고 해서 데이터 타입의 크기가 큰 것은 아님. 데이터 타입 자체는 부모가 더 크다!! (고양이<동물)

오버라이드

부모에게 물려받은 멤버(메서드)를 재정의(덮어쓰기)

->그대로 사용하지 않고 내 기호에 맞게 고쳐쓰겠다. 독립적인 영역 확보.

 

오버라이드는 오버라이드만 아는 것이 아니라 오버로드와 비교해서

어떤 점이 다른지 확실히 구분할 줄 알아야 함! 면접에서 물어볼 수 있다고 하셨다!!

 

★★★오버로드 VS 오버라이드

 

오버로드 : 한 클래스 내에서 동일한 이름의 메서드를 여러 개 정의하는 것.

-메서드 이름이 같아야 하고

-입력 파라이머터 개수나 데이터 타입이 달라야만 성립한다.

-리턴 타입은 같던 다르던 상관없다.

 

오버라이드 : 상속을 통해 물려받은 메서드를 재정의하는 것.

-물려받은 메서드 이름이 동일해야 하고

-입력 파라미터 개수, 데이터 타입도 기존에 물려받은 메서드와 동일해야 하고

-리턴 타입도 같아야 한다!

포함/합성 (composition)

상속 : is a 관계

포함/합성 : has a 관계

 

포함/합성은 특정 클래스의 멤버 변수 및 구성 요소로 다른 클래스 객체를 사용하는 것.

추상화 vs 구체화

추상화

-공통 요소를 찾아서 부모 클래스로 제작하는 것.

ex) 슬픈 노래는 발라드(부모 클래스)로 묶자!

 

구체화

-더 자세하게 명시.

-더 작은(구체적인)데이터 타입.

ex )int의 범위는 long 범위보다 더 구체적이다.

개, 고양이는 동물의 공통적인 특징을 가지지만 더 구체적이다.

-자식 클래스로 제작

일반 제어자 (non-access modifiers)

final //변경하지 마!! (abstrace : 완전 반대)

클래스 (final class)에서 의미

-다른 클래스의 부모 클래스가 될 수 없다.

-상속받아서 변경하지 말고, 그대로 쓰라는 의미.

메서드 (final method)에서 의미

-오버라이드 하지마!

-덮어쓰지 말고, 있는 그대로 사용하라는 의미

변수(final variable)에서 의미

-멤버 변수, 지역 변수 모두 한 번 값을 지정하면 값을 변경할 수 없다.

-변수 -> 상수

 

예제)

final을 선언했기 때문에

이미 10으로 정해진 값을 변경할 수 없고 에러가 뜨는 것이다.

 

abstact //반드시 완성해서 쓸 것!

클래스 (추상 클래스 abstract class)

-반드시 상속받아서 완성(더 구체화)해서 사용하라는 뜻.

-미완성 클래스

 

메서드 (추상 메서드 abstract method)

-선언부만 있고, 실제 수행될 코드가 없는 상태의 메서드

-반드시 오버라이드를 통해 완성해서 사용하라는 뜻.

 

변수에서는 사용 X, 변수는 변하니까.

 

예제)

EmptyCan 클래스에서 abstract를 선언하지 않았다면 CanTest 클래스에서

EmptyCan emptyCan = new EmptyCan(); 을 사용할 수 있지만

abstract가 선언된 미완성 클래스이기 때문에

EmptyCan can = newBeerCan();으로 적어야 에러가 나지 않는다.

 

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형