새소식

Study/Java

[Java] 상속과 인터페이스

  • -

 

참고 : 명품 JAVA Programming (개정 4판) 저자 황기태, 김효수 

 

  • 상속 

- 클래스가 위 클래스를 상속받아 확장(extends)함을 의미

- 코드 중복을 제거하여 클래스를 간결하게 구현 가능

- 장점

  1. 클래스의 간결화
  2. 클래스 관리 용이
  3. S/W의 생산성 향상

- 부모 클래스를 슈퍼 클래스(super class), 상속받는 자식 클래스를 서브 클래스(sub class)라고 부름

- 상속을 선언할 때 확장한다는 뜻을 가진 extends 키워드를 사용

 

5-1

- 서브 클래스 객체 생성

Point p = new Point();
ColorPoint cp = new ColorPoint(); 

- 자바 상속의 특징

  1. 클래스의 다중 상속을 지원하지 않는다.
  2. 상속의 횟수를 제한을 두지 않는다.
  3. 계층 구조의 최상위에 java.lang.Object 클래스가 있다.

 

  • 슈퍼 클래스의 접근 지정
슈퍼 클래스 멤버에
접근하는 클래스 종류
슈퍼 클래스 멤버의 접근 지정자
private default protected public
같은 패키지에 있는
클래스
X O O O
다른 패키지에 있는
클래스
X X X O
같은 패키지에 있는
서브 클래스
X O O O
다른 패키지에 있는
서브 클래스
X X O O

 

  • super()를 이용하여 명시적으로 슈퍼 클래스의 생성자 선택

- 서브 클래스의 생성자에서 super()을 이용하면, 슈퍼 클래스 생성자를 명시적으로 선택할 수 있음

- super()는 슈퍼 클래스 생성자를 호출하는 코드

5-3

 

  • 업캐스팅

- 캐스팅(casting) : 타입 변환

- 업캐스팅(upcasting) 서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환하는 것

Person p;
Student s = new Student();
p = s; //  업캐스팅

 

  • 다운캐스팅

- 업캐스팅과 반대로 캐스팅하는 것

- 업캐스팅과 달리 명시적으로 타입을 변환해야 함

 

  • instanceof

- 자바에서 레퍼런스가 가리키는 객체가 어떤 클래스 타입인지 구분하기 위해 사용하는 연산자

 

  • 메소드 오버라이딩

- 슈퍼 클래스와 서브 클래스의 메소드 사이에 발생하는 관계

- 슈퍼 클래스에 선언된 메소드와 같은 이름, 리턴타입, 매개 변수 리스트를 갖는 메소드를 서브 클래스에 재작성 하는 것

- '슈퍼 클래스 메소드 무시하기 혹은 덮어쓰기'로 표현 할 수 있음 → 동적 바인딩

 

5-5

- 메소드 오버라이딩 제약 사항

  1. 슈퍼 클래스의 메소드와 동일한 원형으로 작성한다.
  2. 슈퍼 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할 수 없다.
  3. static, private, final로 선언된 메소드는 서브 클래스에서 오버라이딩 할 수 없다.
  • 추상 클래스(abstract method)

- 선언은 되어 있으나 코드가 구현되어 있지 않은, 즉 껍데기만 있는 메소드

- abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않음

- 객체(인스턴스)를 생성할 수 없음

- 추상 클래스를 단순히 상속받는 서브 클래스는 추상 클래스가 됨

- 추상 클래스에서의 구현이란, 슈퍼 클래스에 선언된 모든 추상 메소드를 서브 클래스에서 오버라이딩하여
실행 가능한 코드로 구현하는 것을 말함

- 추상 클래스를 이용하면 응용프로그램의 설계와 구현을 분리할 수 있음

- 계층적 상속 관계를 가지는 클래스들의 구조를 만들 때 적합

5-7

 

 

  • 인터페이스(interface)

- S/W를 규격화된 모듈로 만들고, 서로 인터페이스가 맞는 모듈을 조립하듯이 응용프로그램을 작성할 수 있음

- interface 키워드를 사용

 

  • 인터페이스 구성

- 필드(멤버 변수)를 만들 수 없음

- 추상 메소드는 public abstract로 정해져 있으며, 생략될 수 있고, 다른 접근 지정으로 지정될 수 없음

- default, private, static 메소드들은 모두 인터페이스 내에 코드가 작성되어 있어야 함

- default 메소드의 접근 지정은 public으로 고정

- private 메소드는 인터페이스 내에서만 호출 가능

- static 메소드의 경우 접근 지정이 생략되면 public이며, private로도 지정 가능

 

- 인터페이스는 객체를 생성할 수 없음

- 인터페이스 타입의 레퍼런스 변수는 선언 가능

- 인터페이스끼리 상속 가능

- 인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현해야 함

 

  • 인터페이스 구현

- implements 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현한 클래스

- 인터페이스의 상속은 extends 키워드 사용, 인터페이스의 다중 상속 허용

- 클래스는 하나 이상의 인터페이스를 구현할 수 있는데, 이 경우 콤마로 각 인터페이스를 구분하여 나열하며, 

각 인터페이스에 선언된 모든 추상 메소드를 구현해야 함

 

  • 인터페이스 vs 추상 클래스

- 공통점

  1. 객체를 생성할 수 없고, 상속을 위한 슈퍼 클래스로만 사용
  2. 클래스의 다형성을 실현하기 위한 목적

- 차이점

비교 목적 구성
추상 클래스 서브 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브 클래스에서 구현할 수 밖에 없는 기능만을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적(다형성) - 추상 메소드와 일반 메소드 모두 포함

- 상수, 변수 필드 모두 포함
인터페이스 객체의 기능을 모두 공개한 표춘화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적(다형성) - 변수 필드(멤버 변수)는 포함하지 않음

- 상수, 추상 메소드, 일반 메소드, default메소드, static 메소드 포함

- protected 접근 지정 선언 불가

- 다중 상속 지원

 

 

 

 

728x90

'Study > Java' 카테고리의 다른 글

[Java] 모듈과 패키지, 자바의 기본 패키지  (0) 2022.06.22
[Java] 클래스와 객체  (0) 2022.05.27
[Java] 예외처리  (0) 2022.05.17
[Java] 배열  (0) 2022.05.17
[Java] 반복문  (0) 2022.05.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.