연습장

6. 상속 본문

Java/자바 공부

6. 상속

도다람 2019. 10. 16. 00:35

1. 상속 : 이미 있는 클래스나 인터페이스에 포함된 멤버를 새로운 클래스 또는 인터페이스에 물려주는 기법

 

부모클래스(슈퍼클래스, 기본클래스)

자식클래스(서브클래스, 파생클래스, 확장클래스)

 

자식클래스는 부모 클래스에 물려받은 멤버 그대로 사용.변경 가능하고, 새 멤버 추가 가능.

자식클래스의 속성, 동작이 더 많다

 

2. 클래스 상속

is-a 관계 (상속관계)  : 원은 도형이다, 사과는 과일이다

has-a 관계 (소유관계) : 자동차는 엔진이 있다, 스마트폰은 카메라가 있다

 

상속의 선언

extends 키워드 : 자식클래스는 부모클래스에서 확장한다

 

[부모클래스]

class SuperClass{

 

}

 

[자식클래스]

class SubClass extends SuperClass{  자식클래스 , 부모클래스 순서

 

}      

 

3. 메서드오버라이딩

   ①메서드오버라이딩 : 부모클래스에서 정의된 메서드를 자식클래스가 다시 정의하는 것

      메서도오버로딩 : 동일한클래스에 이름은 같지만 시그너처가 하나라도 다른 여러 개의 메서드를 중복해 정의

 

규칙 : 부모클래스의 메서드와 동일 시그너처 사용함, 반환 타입까지 동일해야 함

부모 클래스의 메서드보다 접근 범위를 더 좁게 수정할 수 없음

추가적인 예외가 발생함을 못 나타냄

 

private메서드, 정적static메서드, final메서드 = 부모클래스에 있는 다음 메서드를 자식클래스가 오버라이딩 불가

 

   ②오버라이딩 된 메서드 앞에 @Override 어노테이션이 있는 코드 쉽게 봄

부모랑 자식의 타입이 같아야 하는데 그렇지 않음을 알려줌 

 

   ③부모클래스의 멤버 접근

super 키워드 : 현재 객체에서 부모클래스의 참조, 자식객체는 super키워드 사용해 부모객체의 메서드나 필드에 직접 접근 가능

 

   ④<메서드오버라이딩과 메서드오버로딩 비교>

비교요소 메서드오버라이딩 메서드오버로딩
메서드 이름 동일 동일
매개변수 동일 다름
반환타입 동일 관계없음
상속관계 필요 필요없음
예외와 접근 범위 제약 있음 제약 없음
바인딩 호출할 메서드를 실행 중 결정하는 동적 바인딩 호출할 메서드를 컴파일할 때 결정하는 정적 바인딩

 

4. 패키지

패키지 : 클래스를 모아 둔 폴더

 

패키지의 선언 : 패키지는 반드시 첫 행에 선언, 패키지 이름은 모두 소문자로 명명

 

패키지를 선언하지 않을 때 : 자동으로 (기본 패키지)default가 만들어지고 그곳에 저장됨

패키지를 선언할 때 : 선언한 패키지에 저장됨

 

패키지의 사용 : 패키지 이름과 클래스 이름 함께 사용 - 다른 패키지에 있는 클래스에 접근 가능

패키지문과 첫번째 클래스 선언부 사이에 위치

 

import 패키지이름 . 클래스 ;   또는   import 패키지이름 . * ;

 

 * : 패키지 경로에 있는 모든 클래스 의미, 패키지 아래 다른 패키지 경로는 포함하지 않음

 

 

5. 자식클래스와 부모생성자

상속은 위에서부터 처리됨. 부모의 생성자를 항상 먼저 호출함

자식생성자를 호출하면 부모생성자도 자동 호출됨

 

super( )를 호출하려면 this( )와 동일하게 생성자 내부 첫 행에 위치해야 함

 

 

6. 상속과 접근 제어

private 동일 클래스만 접근 가능

public 모두 접근 가능

default 동일 패키지만 접근 가능

protected 동일 패키지, 자식 클래스만 접근 가능

 

접근지정자 사용 주의사항

private멤버는 상속되지 않음.

클래스는 public, default만 가능

오버라이딩 시, 부모클래스 메서드 보다 더 좁은 접근 지정 불가능

 

다른 패키지에 있는 공개된 클래스 사용하려면 import문으로 패키지 경로를 컴파일러에 알려줘야 함

 

 

7. final클래스 : 더 상속 불가한 종단 클래스, 자식클래스를 정의해 비공개 정보에 접근하거나 시스템 파괴하는 경우를 방지, String클래스가 대표적임, 특정 메서드만 오버라이딩하지 않도록 하기 위한 선언

 

 

8. 객체의 타입 변환 : 자동 타입 변환, 강제 타입 변환

타입변환은 상속 관계일 때만 가능함

 

자동타입변환 : 자식클래스를 부모클래스로 변환

부모타입변수로 자식 객체에 접근할 수 있게 함

Student s = new Student( );

Person p = s;     자동타입변환 함

 

강제타입변환 : 부모객체를 자식객체로 강제타입변환 시엔 오류가 발생함

자식객체이지만 부모타입변수가 참조되면 자식타입으로 변환 가능

Person p = new Person( );

Student s = (Student) p;     강제타입변환 시, 오류 발생

 

Student s1 = new Student( );

Person p = s1;

Student s2 = (Student) p;     강제타입변환 가능, p는 부모타입변수지만 자식객체 가리킴

 

 

'Java > 자바 공부' 카테고리의 다른 글

5. 문자열, 배열, 디버깅  (0) 2019.10.15
4. 객체지향  (0) 2019.10.15
분기문 - break문, continue문  (0) 2019.10.13
반복문 - while문, do~while문, for문  (0) 2019.10.13
조건문(선택문) - if문, switch문  (0) 2019.10.13
Comments