상속

ChaeHo95·2022년 5월 22일
0

Java

목록 보기
3/10

상속의 개념

부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려 받는 것

자식 클래스는 부모 클래스에 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 가짐

주의할 점은 상속은 클래스 사이의 상속이지 객체 사이의 상속이 아님

상속의 필요성

  • 클래스의 간결화 - 멤버의 중복 작성 불필요
  • 클래스 관리 용이 - 클래스들의 계층적 분류
  • 소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이

상속 선언

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

자바 상속의 특징

  • 클래스의 다중 상속을 지원하지 않음
  • 상속의 횟수에 제한이 없음
  • 계층 구조의 최상위애 java.lang.Object 클래스가 존재

부모 클래스에 대한 접근 지정

  • Private멤버 자식 클래스를 포함하여 다른 어떤 클래스에서도 접근 불가
  • defalut 멤버 패키지에 있는 모든 클래스가 접근 가능 자식 클래스가 다른 패키지에 있다면 접근 불가
  • public 멤버 모든 클래스에서 접근 가능
  • protected 멤버 같은 패키지에 속한 모든 클래스들 상속 받은 자식 클래스는 패키지 상관없이 접근 가능

자식 클래스와 부모 클래스의 생성자 호출 및 실행

자식 클래스와 부모 클래스는 각각 생성자를 가지며, 각각의 멤버 기능을 각각 수행

자식 클래스의 객체가 생성되면 객체 속에 자식 클래스의 멤버와 부모 클래스의 멤버가 모두 들어 있음

부모 클래스의 생성자가 먼저 실행 한 후 자식 클래스의 생성자가 실행 됨

자식 클래스에서 슈퍼 클래스 생성자 선택

  • 부모 클래스의 기본 생성자가 자동 선택되는 경우 개발자의 명시적 지시가 없으면, 자식 클래스의 생성자가 기본 생성자이든 매개변수를 가진 것이든 기본 적으로 부모 클래스에 만들어진 기본 생성자 선택
  • super()를 이용하여 명시적으로 부모 클래스의 생성자 선택 자식 클래스의 생성자에서 super()를 이용하면, 부모 클래스 생성자를 명시적으로 선택 super()를 이용하면, 슈퍼 클래스 생성자를 명시적으로 선택 가능

업캐스팅

자식 클래스의 객체에 대한 레퍼런스를 부모 클래스 타입으로 변환하는 것

다운캐스팅

업 캐스팅과 반대로 개념이며, 다운캐스팅 시 명시적으로 타입 변환을 지정해야 함

메소드 오버라이딩

부모 클래스와 자식 클래스의 메소드 사이에 발생하는 관계로서, 부모 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 메소드를 자식 클래스에서 재 작성 하는 것

메소드 오버라이딩은 ‘부모 클래스 메소드 무시하기 혹은 덮어 쓰기’ 로 표현 가능, 이란 처리를 동적 바인딩이라고 함

오버라이딩의 목적, 다향성 실형

상속을 통해 ‘하나의 인터페이스에 서로 다른 내용 구현’이라는 객체 지행의 다향성을 실현하는 도구

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

  • 부모 클래스의 메소드와 동일한 원형으로 작성
  • 부모 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할수 없음
  • static이나 private 또는 final로 선언된 메소드는 서브 클래스에서 오버라이딩 할수 없음

동적 바인딩: 오버라이딩된 메소드 호출

실행할 메소드를 컴파일 시에 결정 하지 않고 실행 시 결정하는 것

super 키워드를 이용하면 정적 바인딩을 통해 부모 클래스의 멤버에 접근 가능

오버로딩

오버라이딩과 달리 한 클래스나 상속 관계에 있는 클래스들 사이에 메소드의 이름은 같지만, 매개변수 타입이나 개수가 다르게 메소드를 작성하는 경우

추상 메소드

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

추상 클래스

추상 메소드를 포함한 클래스

추상 메소드가 없지만 abstract로 선언한 클래스

추상 클래스는 객체를 생성할 수 없음

추상 클래스의 상속

추상 클래스를 단순히 상속받는 자식 클래스는 추상 클래스

추상 클래스의 구현과 목적

추상 클래스의 구현이란, 부모 클래스에 선언된 모든 추상 메소드를 자식 클래스에서 오버라이딩 하여 실행 가능한 코드로 구현하는 것

추상 클래스의 목적은 추상 메소드를 통해 자식 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스의 역할을 하고, 자식 클래스는 추상 메소드를 목적에 맞게 구현하는 다형성을 실현

추상 클래스의 용도

추상 클래스를 이용하면 응용프로그램의 설계와 구현을 분리하는 것

계층적 상속 관계를 가지는 클래스들의 구조 만들기 위함

인터페이스

interface 키워드를 사용하여 클래스를 선언하듯이 선언하는 것

  • 인터페이스 구성 추상 메소드 default 메소드 private 메소드 static 메소드 필드 선언 불가
  • 객체를 생성 불가
  • 인터페이스 타입의 레퍼런스 변수는 선언 가능
  • 인터페이스끼리 상속 가능
  • 인터페이스를 상속받아 클래스 작성 시 인터페이스의 모든 추상 메소드를 구현해야 함

인터페이스 구현

인터페이스 구현이란 implements 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현하는 클래스를 작성하는 것

콤마를 이용하여 다중 인터페이스 구현 가능

인터페이스 상속

상속을 통해 기존 인터페이스에 새로운 규격을 추가한 새로운 인터페이스를 만들 수 있으며, 인터페이스의 상속은 extends 키워드 사용

클래스는 인터페이스를 상속 받을 수 없음

인턴페이스의 목적

구현한 내용이 서로 다른 클래스 선언하므로서 다형성 실현

인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 구격 선언이며, 클래스의 다형성을 실현하는 도구

추상 클래스와 인터페이스 비교

추상 클래스의 목적

추상 클래스는 자식 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 자식 클래스에서 상속 받아 활용할 수 있도록 하되, 자식 클래스에서 구현 할 수 밖에 없는 기능만 추상 메소드로 선언하여,

자식 클래스에서 구현도록 하는 목적

인터페이스의 목적

인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속 받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적

참조 : 명품 JAVA Programming 개정 4판

profile
what you do matters ,but why you it matters much more 당신이 무엇을 하는지는 중요하지만, '왜' 그것을 하는지는 훨씬 더 중요합니다.

0개의 댓글