일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 첫알고리즘평가
- prefixsum #C언어
- kb취업교육
- 전문가특강
- kb 기자단
- SQLD
- KB국민은행
- kb it's your life
- autohotkey
- 오토핫키
- 금융권it
- kb네트워킹캠프
- sql내장함수
- 반별이벤트
- 멀티캠퍼스
- 금융권 부트캠프
- sql
- 이차원배열
- kb 취업교육
- kb it's your life 기자단
- 취업교육
- 알고리즘
- kb it's your life 6기
- 부트캠프
- SQL데이터타입
- kbit교육
- 금융권 it
- Today
- Total
지식보부상님의 공부 일지
Java [07] 상속 본문
[1] 상속 개념
◈ 상속 (Inheritance)
- 코드의 중복성을 막기 위해 부모가 자식에게 필드, 메소드를 물려주는 행위
[2] 클래스 상속
◈ 클래스 상속
public class 자식클래스 extends 부모클래스 {
}
- extends 뒤에 부모 클래스명 작성
- 다중상속 지원 x
[3] 부모 생성자 호출
◈ 부모 생성자 호출
- 자식 객체 생성시 부모 객체 생성된 후에 자식 객체가 생성됨
- 부모 생성자는 자식 생성자의 super(); 에 의해 호출되는데, 생략시 기본 생성자 호출
- 원하는 부모 생성자가 있으면 자식 생성자 첫줄에 super(매개값 ...); 으로 명시하면 됨
[4] 메소드 재정의
◈ 메소드 오버라이딩
- 부모로부터 상속된 메소드를 자식 클래스에서 재정의하는 것
- 자식 메소드가 우선적으로 사용됨
- 부모 메소드의 선언부(리턴 타입, 메소드 이름, 매개변수 등)이 동일해야
- 접근 제한을 강화하는 오버라이딩 불가 (public→private으로 변경 x)
- 새로운 예외 throw 불가
- @Override : 정확히 오버라이딩 되었는지 체크 후 문제가 있다면 컴파일 에러 발생시키는 어노테이션
◈ 부모 메소드 호출
- super.메소드(); 로 자식에서 부모의 메소드 호출 가능
[5] final 클래스와 final 메소드
◈ final 클래스
- final 클래스는 최종적인 클래스이므로 상속 불가
◈ final 메소드
- final 메소드는 오버라이딩 불가
=> 부모의 final 메소드는 자식에서 재정의 불가함
[6] protected 접근 제한자
◈ protected 접근제한자
- 같은 패키지 내 또는 자식 객체에서만 접근 가능하도록 제한
- 다른 패키지(자식)이 호출할 때, new 연산자로 부모생성자 직접 호출 불가, super();로 부모생성자 호출해야
[7] 타입 변환
◈ 자동 타입 변환 (Promotion)
부모타입 변수 = 자식타입객체;
- 자동으로 타입 변환이 일어나 부모와 동일하게 취급 가능
=> 자동 타입 변환 일어난 이후에는 부모 클래스의 필드, 메소드만 접근 가능
- ★ 자식 클래스에서 오버라이딩된 메소드 있으면 부모대신 자식의 오버라이딩된 메소드가 호출됨!
◈ 강제 타입 변환 (Casting)
- 부모는 자식타입으로 자동 변환 안됨
=> 캐스팅 연산자로 강제 타입 변환해야!
Parent parent = new Child(); // 자동 타입 변환
Child child = (Child) parent; // 강제 타입 변환
[8] 다형성
◈ 다형성
- 사용 방법은 동일하나 실행 결과가 다양하게 나오는 성질
- 자동 타입 변환 + 메소드 오버라이딩 으로 다형성 구현
◈ 필드 다형성
- 필드타입 동일하나, 대입 객체가 달라 결과가 다양하게 나올 수 있는 것
◈ 매개변수 다형성
- 메소드의 매개변수가 클래스 타입인 경우, 어떤 자식 객체 제공되느냐에 따라 메소드 실행 결과 달라짐
Driver.java
public class Driver {
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
Vehicle.java
public class Vehicle{
public void run() {
System.out.println("차가 달립니다.");
}
}
Bus.java
public class Bus extends Vehicle {
@Override
public void run() {
System.out.println("버스가 달립니다.");
}
}
Taxi.java
public class Taxi extends Vehicle {
@Override
public void run() {
System.out.println("택시가 달립니다.");
}
}
DriverMain.java
public class DriverMain {
public static void main(String[] args){
Driver driver = new Driver();
Bus bus = new Bus();
driver.run(bus); // 버스가 달립니다. 출력
driver.run(new Taxi()); // 택시가 달립니다. 출력
driver.run(new Vehicle()); // 차량이 달립니다. 출력
}
}
^ driver.run() 메서드의 매개변수에 어떤 자식(Bus, Taxi, Vehicle)이 주어지느냐에 따라 다른 결과(다형성)
[9] 객체 타입 확인
◈ instanceof 연산자
- 변수가 참조하는 객체의 타입 확인
boolean result = 객체 instanceof 타입;
- [객체] 가 [타입] 의 타입이면 true, 아니면 false를 리턴
if(parent instanceof Child child) {
child.childMethod1(); // 사용 가능
}
- Java12 이후에는 위의 결과가 true면 parent 를 child변수에 대입 (타입 변환 발생)
[10] 추상 클래스
◈ 추상 클래스
- 객체 생성할 수 있는 실체 클래스들의 공통적인 필드/메소드 추출하여 선언한 클래스
- 실체 클래스의 부모 역할로 공통적인 필드/메소드 물려받을 수 있음
◈ 추상 클래스 선언
- 클래스 선언에 abstract 키워드 추가
- new 연산자로 객체 직접 생성 불가
- 실체 클래스를 만들기 위한 부모 클래스로만 사용됨
public abstract class 클래스명{
// 필드
// 생성자
// 메소드
}
- 자식 객체에서 추상 클래스의 생성자가 호출되므로 생성자 반드시 있어야 함
◈ 추상 메소드와 재정의
- 메소드 선언부만 동일하고, 실제 내용은 자식 클래스마다 달라야 하는 경우 주로 사용
abstract 리턴타입 메소드명(매개변수, ..);
- 중괄호가 없음!
public abstract class Animal {
abstract void sound();
}
^ 각 동물들은 sound() 메서드 가지지만 동물별로 울음소리가 모두 다르므로,
실제 메소드 내의 내용은 모두 달라야 함 => 추상 메소드 이용
[11] 봉인된 클래스
◈ sealed 클래스
- Java 15부터 무분별한 자식 클래스 생성 방지를 위해 도입됨
- sealed 키워드 사용시 permits 키워드 뒤에 상속 가능한 자식 클래스 지정
public sealed class Person permits Employee, Manager { ... }
^ Employee, Manager 클래스에서만 Person을 상속받을 수 있음
public final class Employee extends Person { ... }
^ final 키워드로 Employee 클래스는 더이상 자식 생성 불가
public non-sealed class Manager extends Person { ... }
^ non-sealed 키워드로 Manager 클래스는 자식 클래스 생성 가능
'KB IT's Your Life > Java' 카테고리의 다른 글
Java [09] 중첩 선언과 익명 객체 (0) | 2025.04.24 |
---|---|
Java [08] 인터페이스 (0) | 2025.04.23 |
Java [06] 클래스 (1) | 2025.04.22 |
Java [05] 참조 타입 (3) | 2025.04.22 |
Java [04] 조건문과 반복문 (1) | 2025.04.21 |