항해99/언어 스터디 [혼공자]

스터디 7일차 07-1 상속

숲별 2022. 10. 5. 06:50
728x90

<상속을 사용하는 이유>

1) 클래스를 재사용 => 중복 코드↓

2) 유지 보수 시간 최소화 (부모 수정=> 모든 자식 클래스 수정)

 

부모 클래스 = 상위 클래스

자식 클래스 = 하위 클래스, 파생 클래스

 

class 자식클래스 extends 부모클래스 { //자식이 부모 결정
  //필드
  //생성자
  //메소드
}

 

<상속의 특징>

1)여러 개의 부모 x

2)private 접근 제한은 상속 대상x

   default 접근 제한은 같은 패키지만 가능.

 

super()는 부모의 기본 생성자를 호출

 

직접 자식 생성자를 선언하고 명시적으로 부모 생성자 호출시

반드시 자식 생성자 첫 줄에 super(매개값,...) 위치시켜야하고 그 매개값의 타입과 일치하는 부모 생성자를 호출. 

 

 

<오버로딩(loading)>

과적하다. 많이 싣는다. 하나의 메소드 이름으로 여러 기능을 담는다 하여 붙여진 이름.

클래스 내에 같은 이름의 메소드나 생성자를 여러개 선언하는 것.

매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.

 

 

<오버라이딩(overriding, 메소드 재정의)>

부모에게서 상속받은 메소드의 내용이 자식 클래스에 맞지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의 하는 것을 말한다.

 

-규칙-

1)부모의 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 목록)을 가짐.

2)접근 제한을 더 강하게 재정의x

     public → default, private(x)

     default, private → public(o)

3)새로운 예외(Exception)을 throws 할 수 없습니다.

 

부모 객체의 메소드는 숨겨져서 자식 객체의 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다.

But, 자식 클래스 내부에서 부모 클래스 메소드를 호출해야 한다면 super로 가능

 

class Parent{
 	void method1(){...}
 	void method2(){...}
 }
class Child extends Parent{
 	void method2(){...} //오버라이딩
    void method3(){
    	method2(); //오버라이딩된 호출
        super. method2(); //부모 메소드 호출
    }    
}

 

<final>

클래스, 필드, 메소드를 선언시 사용 가능.

해당 선언이 최종 상태이고 절대 수정 불가.

 

1. final 클래스 : 부모 클래스 불가.

2. final 메소드 : 오버라이딩 불가.

3. final 필드 : 상수.

   

 

 

https://teamsparta.notion.site/201b2214d5204847b444595d317d5d61

 

테즈먼해 스터디 일지

스터디 일지 예시 보기

teamsparta.notion.site