본문 바로가기
자바 한계단

상속 Inherit

by juneMiller 2021. 10. 17.

다른 클래스가 가지고 있는 멤버(필드,메소드)들을 새로 작성할 클래스에서 

직접 만들지 않고 상속 받음으로써, 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능 

 

-목적 : 클래스의 재사용, 연관된 일련의 클래들에 대한 공통적인 규약정의 

 

장점 

1. 보다 적은 양의 코드로 새로운 클래스 작성 가능

2. 코드를 공통적으로 관리하기에, 코드 추가 및 변경 용잉

3. 코드의 중복제거를 하여 생산성과 유지보수에 크게 기여 

 

상속의특징

1. 모든클래스는Object클래스의후손
Object클래스가 제공하는 메소드를 오버라이딩하여 메소드 재구현 가능
ex) java.lang.String클래스의 equals()와 toString()

 

2. 부모클래스의생성자, 초기화블록은상속안됨
자식 클래스 생성시, 부모 클래스 생성자가 먼저 실행
자식클래스 생성자안에서 부모클래스 생성자호출을 명시하고 싶으면super() 활용

 

3. 부모의private멤버는 상속은 되지만 직접 접근불가
자식 객체 생성시에 부모의 필드 값도 전달받은 경우,
자식 생성자안에서 부모의private 필드에 직접 접근하여 대입불가
super() 이용하여 전달 받은 부모필드값을 부모생성자 쪽으로 넘겨서 생성하거나
setter, getter 메소드를 이용하여 접근

 

 

상속 방법 : extends 키워드로 클래스간 상속

 

표현식 : 

 

[접근제한자] class 클래스명 extends 클래스명{}
public class Academy extends Company{}

 

 

단일 상속(Single Inheritance)  : 클래스간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성

자바에서는 다중 상속이 되지 않는다.!! 

 

다중 상속(Multiple Inheritance) 

C++에서 가능한 기능으로 여러 클래스로 부터 상속을 받으며
복합적인 기능을 가진 클래스를 쉽게 작성 가능
서로 다른 클래스로 부터 상속받은 멤버간의 이름이 같은 경우 문제발생

 

 

super() Vs super.

 

01.super() 

부모 객체의 생성자를 호출하는 메소드로 기본적으로 후선 생성자에게 부모 생성자가 포함됨 

 

부모 생성자를 호출하는 super()가 첫줄에 존재( 부모 생성자가 가장 먼저 실행되어야 하기 때문에 

명시적으로 작성시에도 반드시 첫 줄에만 작성) 

 

매개변수 있는 부모 생성자 호출은 super(매개변수, 매개변수)를 넣으면 됨 

 

02.super.

상속을 통한 자식 클래스 정의 시 해당 자삭 클래스의 부모객체를 가르키는 참조 변수 

자식 클래스내에서 부모클래스 객체에 접근하여 필드나 메소드 호출시 사용. 

 

오버라이딩 Overriding 

자식클래스가  상속받은 부모 메소들을 재작성하는 것 

부모가 제공하는 기능을 후손이 일부 고쳐 사용하겠다는 의미로 자식 객체를 통해 실행시 

호손이 우선권을 가짐 

 

특징

메소드 헤드라인 위에 반드스 Annotation, @Override 표시 

접근 제어자를 부모 것보다 같거나 넓은 범위로 변경 가능 

부모 메소드의 예외처리 클래스 처리 범위보다 좁은 범위로 예외처리 클래스 수정 가능 

 

 

성립 조건 

부모 클래스의 메소드와 자식클래스 메소드 비교 

-메소드 이름 동일

-매개변수의 개수, 타입 동일

-리턴 타입 동일

-private 메소드 오버라이딩 불가

 

 

오버로딩 Overloading 

한 클래스 내에서 같은 이름의 메소드를 여러개 정의 하는것 

 

성립 조건 

같은 메소드 이름

다른 매개변수 선언부(매개변수 타입, 개수, 순서)

 

주의사항

메소드의 리턴타입은 오버로딩 조건과 관계없음

 

 

 

final 예약어 

final 클래스 : 상속이 불가능한 클래스 

public final class FinalClass { } 

 

final 메소드 : 상속 시 오버라이딩이 불가능한 메소드 

 

public final void method() {}

 

 

대상에 따른 사용 가능한 제어자, 예약어 

클래스 : public, (default), final, abstract 

메소드 : 모든 접근 제어자, final, abstract, static

변수 : 모든 접근 제어자, final, static 

지역변수 : final

 

유의사항

클래스에 abstract 와 final동시에 사용 불가능
메소드에 static과 abstract 동시에 사용 불가능
abstract 메소드의 접근 제어자로 private 불가능

 

 

'자바 한계단' 카테고리의 다른 글

Map 컬렉션 - HasMap, Hashtable  (0) 2021.12.08
다형성 ploymorphism  (0) 2021.10.17
자바 객체배열 복습  (0) 2021.10.01
자바 MVC 패턴  (0) 2021.10.01
자바 오버로딩, this, this()  (0) 2021.10.01