티스토리 뷰
참조
https://www.javatpoint.com/inheritance-in-java
Inheritance in Java - Javatpoint
Inheritance in java or java inheritance with single, multilevel, hierarchical, java multiple inheritance and hybrid inheritance with example , parent class and subclass in java, java IS-A relationship.
www.javatpoint.com
😓JAVA 8 기준으로 작성된 글입니다.😓
📗
inheritance
한 클래스에서 다른 클래스의 속성을 획득하는 개념
java에서는 class, abstract class, interface 3가지를 사용하여 상속 구조를 만듭니다.
이점
1. 코드의 재사용성
2. override(런타임 다형성 지원)
📗
abstract class와 interface
공통점
1. 인스턴스화 불가
2. 추상화를 위해 사용
차이점
abstract class | interface |
완성된 메서드를 포함 가능 | 추상 메서드만 가능(java8부터는 default, static method 지원) |
다중확장 불가 | 다중사용 지원 |
final (or non), static( or non) 변수 선언 가능 | final, static 변수 선언 가능 |
class에서 interface 사용 가능 | interface에서 class 확장 불가 그러나 interface 확장은 가능 |
interface에서는 왜 final static만 변수만 지원할까?
인스턴스화 될수없으면 해당 변수에 접근할 수 없다. <- static으로 접근
static인 값이 read only가 아니면 공유 리소스를 참조하는
로직들에 영향이 갈수있으므로
📗
해당 글에서는 상속이라는 단어보다는 확장과 사용이라는 단어가 자주 나오며
상속이 확장과 사용을 포괄하는 의미로 사용합니다.
extends 확장
implements 사용
다중 확장
c++ 와는 다르게 Java에서는 다중 확장을 지원하지 않습니다.
왜 지원하지 않을까?
스캐너와 복사기가 있는데 두 개다 전원을 키는 기능이 있습니다.
그리고 복합기에서 스캐너, 복사기 모듈을 확장 시
스캐너와 복사기 중에서 어떤 전원을 켜는 기능을 사용하는지
모호해지는 일이 있습니다.
그래서 코드의 상속 구조 이용하기 위해서는
interface와 class를 적절히 섞어 사용합니다.
interface는 Implements 키워드를 다중 사용이 가능합니다.
상속 구조에서는 다양한 방식이 존재합니다.
1.mutiple (java에서는 사용 불가)
2. multi-level
3.heirarchical
4. hybrid (java에서는 사용 불가)
📗
method override
코드의 재사용성, 다형성, 동적 재정의와 관련이 있다.
dynamic method dispatch
runtime때 method를 재정의 한다.
동작만 재정의하며 변수는 재정의 불가이다.
엄밀히 말하자면 not static, not final method(동작)만 재정의 할 수 있다.
ref식별자의 m1() method가 동적(runtime에)으로 재정의 된다.
📗
when to use abstract class, interface
1️⃣ interface보다 abstract class를 사용할 때
1. public이 아닌 멤버를 구현시(interface는 only public)
2. 자식 개체에 필수공통기능을 구현할 때 ( 상속개념 적용, 공통 템플릿 적용)
3. 비정적 필드가 필요로 할 때 (상태를 가진다는 의미)
2️⃣ abstract class보다 interface를 사용할 때
1. 만든 기능이 다양한 개체에서 필요한 기능일 때( 모든 개체가 아닌 1 < n < 개체종류수 )
2. 다중 상속과 유사한 방식이 필요시(extends는 1개만 가능)
3. 작고 간결한 기능이 필요시(큰 기능은 abstract class 사용하기)
'Java & Kotlin' 카테고리의 다른 글
Java Exception (0) | 2022.09.18 |
---|---|
Java classPath (0) | 2022.09.04 |
Java modifier (0) | 2022.08.24 |
Java String Constant Pool, Heap (0) | 2022.08.17 |
Java virtual Machine (0) | 2022.08.15 |
- Total
- Today
- Yesterday
- 개발자채용
- 관계설정
- jre
- 백준 제로 자바
- 프로그래머
- jdk11
- Spring
- 다대일
- 백준
- JDK
- 백엔드
- jre11
- boot
- ㅃ
- mappedby
- 코딩테스트
- jvm
- 백준 제로
- 자바
- JPA
- JDK8
- jre8
- 스타트업
- java8
- 스택
- 문제
- 자사서비스
- 알고리즘
- boot 일대다
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |