///////
Search

상속,메소드오버라이딩,다형성

작성 날짜
2022/09/27 07:17
작성자
황시은

상속

왜 나오게 되었을까?

기존 만들어 놓은 클래스를 단순 복사 붙여넣기가 아닌 방법으로 다시 재사용하기 위해서. → for reuse!
A클래스가 B클래스를 상속 받을 때,
A클래스 : 부모 클래스
B클래스 : 자식 클래스

ㄴ 장점

1.
상송을 사용하면 중복되는 코드를 줄일 수 있다.
2.
상속 받아서 이미 존재하는 클래스의 필드와 메소드를 재사용 할 수 있다.

extends

자식 extends 부모클래스 : 키워드를 통해 부모 클래스를 상속 받을 수 있다.

생성자 호출 순서

부모 클래스의 생성자 → 자식클래스의 생성자

ㄴ 왜 자식 객체 생성시 부모생성자 까지 호출되는가?

자식 클래스 객체 안에는 부모 클래스에서 상속된 부분이 들어 있다.
따라서 자식 클래스 안의 부모 클래스 부분을 초기화하기 위하여 부모 클래스의 생성자도 호출되는 것이다

super()

→ 호출하면 부모클래스 생성자 호출
this()와 같이 명시적인 생성자 호출
묵시적인 생성자로서 컴파일러는 부모 클래스의 기본생성자가 자동 호출한다.
class B extends A일때 public B()에서 super()를 컴파일러에서 기본 호출 한다. 이때 class A에서 기본생성자가 없을 경우 super()를 할 생성자가 없어 오류가 생긴다.
→따라서 인수형태에 따라 적절한 생성자가 선택되어야 한다.

메소드 오버라이딩

→ 자식클래스가 부모클래스의 메소드를 자신의 필요에 맞추어 재정의하는것
자신의 함수 바디만 달리 하여야함

오버라이딩 vs 오버로딩

ㄴ 오버라이딩

오버라이딩은 자식 클래스의 공통된 부분은 부모클래스에서 정의한다.
@override 붙이기

ㄴ 오버로딩

같은 함수이름으로 파라미터의 인자 또는 갯수를 달리 하는 것을 말한다.
ex)println()

다형성

객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것!!

다형성의 이해

1.
부모 = 자식 가능 A a = new B() : B가 A를 상속받을때 가능하다.
2.
오버라이딩은 자식꺼가 실행된다.
3.
자식 = 부모가 기본적으로 안된다. B b = new A() : 컴파일 에러
자식 = (자식)부모 에서 기본적으로는 안되지만 부모가 자식의 메모리를 다가지고 있을때는 가능함