1. 상속 개념
설명내용
- 상속 : 부모가 자식에게 필드나 메소드를 물려주는 것
- 개발시간 단축, 클래스의 수정 최소화
- 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외
- 단, 필드는 getter setter이 있다면 접근이 가능하다
- 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속대상에서 제외
- 상속 : 부모가 자식에게 필드나 메소드를 물려주는 것
2. 클래스 상속
설명내용
- 자식 클래스를 선언할 때 부모클래스를 결정, 선택된 부모 클래스는 extends 뒤에 기술
- 자바는 다중상속을 지원하지 않는다
class 자식클래스 extends 부모클래스 // 부모클래스 하나만 상속 가능{ // 필드 // 생성자 // 메소드 }
3. 부모 생성자 호출
설명내용
- 자식 객체를 생성하면 부모 객체가 먼저 생성되고 자식객체가 그다음에 생성
- 부모 객체의 생성자는 자식 생성자의 맨 첫줄에서 호출된다
자식클래스(매개변수선언, ...) { super(매개값, ...); ... }
- super() : 부모의 생성자를 호출 | 매개 변수가 있으면 그에 맞는 생성자를 호출
- 부모 클래스에 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값, …)을 명시적으로 호출해야한다
- 또, 반드시 자식 생성자 첫줄에 위치해야 한다.
4. 메소드 재정의
설명내용
- 메소드 오버로딩
- 메소드의 이름 같음
- 매개변수의 개수 또는 타입이 달라야 한다.
void sleep() void sleep(int hour) int sleep (int hour) { return 0; } // 리턴 타입만 다른 경우에도 에러가 나온다 void sleep(int hour, int minute) void sleep(int hour, double minute) void sleep(int minute, int hour) // 4번째 실행문과 순서는 다르지만, 타입이 동일하므로 에러가 나온다
- 메소드 오버라이딩 (@Override)
- 상속된 부모 메소드 내용이 자식 클래스에 맞지 않으면, 자식 클래스에서 동일한 메소드를 재정의하는 것
- 메소드가 오버라이드되면 부모 객체의 메소드는 숨겨지므로 자식 메소드가 호출된다.
- 규칙
- 부모의 메소드와 동일한 시그니처(리턴타입, 메소드 이름, 매개변수 리스트)를 가져야 한다.
- 부모 클래스의 메소드보다 접근 제한을 더 강하게 오버라이딩 할 수는 없다. (예외, 접근제어자 둘 다 부모보다 같거나 큰 범위여야한다)
- 새로운 예외(Exception)를 throws 할 수 없다. (예외처리 파트에서 배움)
- 접근제한을 더 강하게 오버라이딩 할 수 없다는 것은 부모 메소드가 public 접근 제한을 갖고 있을경우 오버라이딩 하는 자식 메소드는 default나 private 접근제한으로 수정할 수 없다는 뜻
- 여기서 반대로는 가능하다. 만약 부모 메소드가 default 접근 제한을 갖는다면 재정의되는 자식 메소드는 default 또는 public 접근 제한을 가질 수 있다.
- 메소드 오버로딩
5. 추상 클래스
설명내용
- 추상 메소드
- 자식 클래스에서 반드시 오버라이드 해야만 사용할 수 있는 메소드
- 사용 이유 : 자식 클래스에서 반드시 추상메서드를 구현하도록 한다
abstract 리턴타입 메소드명();
- 추상 클래스
- 실체들의 공통되는 특성을 가지고 있는 것을 클래스로 따로 빼둔것
- 삼성, 현대, LG (회사)
- 새, 곤충, 물고기 (동물)
- 일반 클래스와 달리 객체를 직접 생성해 사용하지 못한다.
- new 연산자를 사용해서 인스턴스를 생성하지 못한다.
Animal animal = new Animal(); (X)
- 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용
class Ant extends Animal { ... }
- 추상 클래스의 용도
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일
- 여러사람이 함께 설계하는 경우, 필드나 메소드명을 제약하는 효과
- 실체 클래스를 작성할 때 시간을 절약
- 공통되는 필드와 메소드를 추상 클래스에 선언해 시간 절약
- 설계 규격을 통일하고 오류나 실수 없이 구현하기 위해
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일
- 추상 클래스의 선언
public abstract class 클래스명 { // 필드 // 생성자 // 메소드 } public abstract class Phone { private String owner; public Phone(String owner) { this.owner = owner; } public void turnOn() { System.out.println("폰 전원을 켭니다."); } public void turnOff() { System.out.println("폰 전원을 끕니다."); } } public class SmartPhone extends Phone { // 생성자 public SmartPhone(String owner) { super(owner); } // 메소드 public void internetSearch() { System.out.println("인터넷 검색을 합니다."); } }
- 추상 클래스의 오버라이딩
- 추상 클래스 : 실체 클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해 놓은 추상적인 클래스
- 선언만 통일하고 실행 내용은 달라야하는 경우, 오버라이딩 사용
- 추상 메소드
6. 기타
설명내용
- Java의 모든 클래스들은 “Object”라는 클래스를 상속받는다.
- 따라서 상속을 받지 않더라도 Object 클래스의 요소들을 사용하거나 Override할 수 있다.
- Java의 모든 클래스들은 “Object”라는 클래스를 상속받는다.
7. Daily Quiz
'Dev > ESTsoft 오르미' 카테고리의 다른 글
JVM 조사 : ClassLoader (1) | 2024.02.23 |
---|---|
인터페이스 (0) | 2024.02.23 |
클래스 (0) | 2024.02.23 |
참조자료형 (0) | 2024.02.22 |
연산자 / 조건문과 반복문 (0) | 2024.02.22 |