본문 바로가기
[스파르타코딩클럽]/Java 문법 종합반

Chapter 8. 상속

by 진진리 2023. 10. 16.
728x90

클래스 간의 관계와 상속

부모 클래스의 필드와 메서드를 자식 클래스에게 물려줌

코드의 중복 제거, 재사용성 증가로 생산성과 유지보수성에 유리해짐

  • 상속
public class 자식클래스 extends 부모클래스 {

}
  • 클래스간의 관계
    1. 상속관계: is - a ("~은 ~이다.")
    2. 포함관계: has - a ("~은 ~을 가지고 있다.")
  • Java는 다중상속을 허용하지 않음
  • final 클래스: final class 클래스명으로 선언
    • 더 이상 상속할 수 없음
  • final 메서드: final 반환타입 메서드명()으로 선언
    • 더 이상 오버라이딩 할 수 없음
  • Object 클래스: Java 내 모든 클래스들의 최상위 부모 클래스
    • 모든 클래스는 Object의 메서드를 사용할 수 있음
    • 부모 클래스가 없는 자식 클래스는 컴파일러에 의해 자동으로 Object 클래스를 상속받음

 

오버라이딩

부모 클래스로부터 상속받은 메서드의 내용을 재정의하는 것

  • 오버라이딩 조건
    1. 선언부가 부모 클래스의 메서드와 일치
    2. 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없음
    3. 예외는 부모 클래스의 메서드보다 많이 선언 불가능
  • super: 부모 클래스의 멤버를 참조할 수 있는 키워드
//자식 클래스의 메서드
public void setCarInfo(String model, String color, double price) {
    super.model = model; // model은 부모 필드에 set
    super.color = color; // color는 부모 필드에 set
    this.price = price; // price는 자식 필드에 set
}
  • super(): 부모 클래스의 생성자를 호출할 수 있는 키워드
    • 자식 클래스 객체가 생성될 때 부모 클래스의 멤버들이 먼저 초기화되어야 함
    • 따라서 자식 클래스의 생성자에서 부모 클래스의 생성자가 호출됨
    • 부모 클래스의 생성자는 가장 첫 줄에서 호출이 되어야 함
    • 컴파일러가 super();를 자식 클래스 생성자 첫 줄에 자동으로 추가해줌

 

다형성

  • 참조변수의 타입변환
    1. 자동 타입변환: Mammal mammal = new Whale(); 와 같이 부모타입 변수 = 자식타입 객체; 일 때
    2. 강제 타입변환: 자식타입 변수 = (자식타입) 부모타입 객체; 일 때
      • 자식타입 객체가 부모타입으로 자동 타입변환된 후 다시 자식타입으로 변환될 때만 가능
  • 다형성: 여러 가지 형태를 가질 수 있는 능력
    • 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조  
    • 자동 타입변환된 변수를 사용하여 각각의 자식타입 객체에 재정의 된 메서드 사용 가능
    • 매개변수의 타입이 부모이면 자식 객체들을 매개값으로 전달 가능
    • 반환타입이 부모이면 자식 객체들을 반환값으로 지정 가능
  • instance of: 다형성 기능으로 객체의 원래 클래스명인지 확인하는 것이 필요
    • {대상 객체} instance of {클래스 이름}

 

추상 클래스

추상 클래스 선언: abstract 키워드 사용

public abstract class 추상클래스명 {

}

 

추상 클래스는 추상 메서드를 포함할 수 있음

추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있음

추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있음

 

  • 추상 메서드
    • abstract 키워드 사용하여 선언
    • 정의만 할 뿐, 실행 내용이 없음
    • 반드시 이후에 오버라이딩 되어야 함
public abstract class 추상클래스명 {
	abstract 리턴타입 메서드이름(매개변수, ...);
}
  • 추상 클래스 상속: extends 키워드 사용
public class 클래스명 extends 추상클래스명 {
    @Override
    public 리턴타입 메서드이름(매개변수, ...) {
	    // 실행문
    }
}

 

'[스파르타코딩클럽] > Java 문법 종합반' 카테고리의 다른 글

Chapter 10. 예외처리  (0) 2023.10.17
Chapter 9. 인터페이스  (0) 2023.10.17
Chapter 7. 클래스  (0) 2023.10.16
Chapter 6. 컬렉션  (0) 2023.10.13
Chapter 5. 배열  (0) 2023.10.13