반응형
객체지향언어에서 상속의 장점
클래스의 간결화
: 멤버의 중복 작성 불필요
클래스 관리 용이
: 클래스들의 계층적 분류
소프트웨어의 생산성 향상
: 클래스 재사용과 확장 용이
자바 상속의 특징 / 접근 지정자
| 자바에서는 클래스의 다중 상속을 지원하지 않는다
| 자바에서는 상속의 횟수에 제한을 두지 않는다
| 자바에서는 계층 구조의 최상위에 java.lang.Object 클래스가 있다
슈퍼 클래스 멤버에 접근하는 클래스 종류 |
슈퍼 클래스 멤버의 접근 지정자 | |||
private | 디폴트 | protected | public | |
같은 패키지에 있는 클래스 | X | O | O | O |
다른 패키지에 있는 클래스 | X | X | X | O |
같은 패키지에 있는 서브 클래스 | X | O | O | O |
다른 패키지에 있는 서브 클래스 | X | X | O | O |
업캐스팅과 instanceof 연산자
캐스팅 ▶ 타입 변환
JAVA 캐스팅 종류: 업캐스팅, 다운캐스팅
업캐스팅
서브 클래스의 객체에 대한 레퍼런스를 슈퍼클래스 타입으로 변환하는 것을 업캐스팅(upcasting)이라고 한다.
Person p;
Student s = new Student();
p = s; // 업캐스팅
다운캐스팅
업케스팅의 반대, 업케스팅과 달리 명시적으로 타입 변환을 지정해야한다.
Student s = (Student) p; // 다운캐슽팅, (Student)의 타입 변환을 반드시 표시
instanceof 연산자
레퍼런스가 가리키는 객체가 어떤 클래스 타입인지 구분하기 위해 사용하는 연산자
Person p = new Student();
if(p instanceof Person) {} // Person을 상속받은 Student 객체+업캐스팅 --> true
if(p instanceof Student) {} // Student 객체 --> true
if(p instanceof Professor) {} // false
오버라이딩
메소드 오버라이딩 제약 사항
- 슈퍼 클래스의 메소드와 동일한 원형으로 작성
- 슈퍼 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할 수 없다 ( ex. private → public)
- static이나 private 또는 final로 선언된 메소드는 서브 클래스에서 오버라이딩 할 수 없다.
동적 바인딩(dynamic binding)
실행할 메소드를 컴파일 시(compile time)에 결정하지 않고 실행 시(run time)에 결정하는 것을 말한다.
→ 자바에서는 동적 바인딩을 통해 오버라이딩 된 메소드가 항상 실행되도록 보장한다.
오버로딩과 오버라이딩 비교
비교 요소 | 메소드 오버로딩 | 메소드 오버라이딩 |
선언 | 같은 클래스나 상속 관계에서 동일한 이름의 메소드 중복 작성 |
서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드 재작성 |
관계 | 동일한 클래스 내 혹은 상속 관계 | 상속 관계 |
목적 | 이름이 같은 여러개의 메소들르 중복 작성하여 사용의 편리성 향상, 다형성 실현 |
슈퍼클래스에 구현된 메소드를 무시하고 서브 클래스에서 새로운 기능의 메소드를 재정의 하고자 함, 다형성 실현 |
조건 | 메소드 이름은 반드시 동일하고, 매개변수 타입이나 개수가 달라야 성립 |
메소드 이름, 매개변수 타입과 개수, 리턴 타입이 모두 동일하여야 성립 |
바인딩 | 정적 바인딩, 호출될 메소드는 컴파일 시에 결정 |
동적 바인딩, 실행 시간에 오버라이딩된 메소드 찾아 호출 |
추상 클래스
추상 메소드(abstract method)
선언은 되어있으나 코드가 구현되어 있지 않은 껍데기만 있는 메소드, 이를 작성하기 위해서는 abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다.
public abstract String getName();
public abstract void setName(String s);
추상 클래스가 되는 경우
- 추상 메소드를 포함하는 클래스
abstract class Shape { // 추상 클래스 선언
public Shape() {}
public void paint() { draw() };
abstract public void draw(); // 추상 메소드 선언
}
- 추상 메소드가 없지만 abstract로 선언한 클래스
abstract class Shape { // 추상 클래스 선언
public Shape() {}
public void paint() {
System.out.println("paint");
};
}
추상 클래스의 용도
- 설계와 구현 분리
- 계층적 상속 관계를 가지는 구조 만들때 적합
인터페이스(interface)
인터페이스: 서로 다른 하드웨어 장치들이 상호 데이터를 주고받을 수 있는 규격
인터페이스 특징
- 인터페이스는 객체를 생성할 수 없다
- 인터페이스 타입의 레퍼런스 변수는 선업 가능하다
- 인터페이스끼리 상속된다
- 인터페이스를 상속받아 클래슬르 작성하면 인터페이승의 모든 추상 메소드를 구현하여야 한다.
인터페이스 구현 → implements
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[No.5] 모듈과 패키지, 자바 기본 패키지 (0) | 2023.01.04 |
---|---|
[NO.3] 클래스와 객체 (0) | 2022.12.30 |
[NO.2] 반복문과 배열 그리고 예외 처리 (0) | 2022.12.29 |
[NO.1] JAVA 기본 프로그래밍 (0) | 2022.12.29 |
[NO.0] JAVA란? (0) | 2022.12.29 |