[Java]자바 프로그래밍(상속)

2024. 1. 20. 20:32· 공부/Java
목차
  1. 상속의 개념
  2. 상속의 장점
  3. 상속
  4. 상속의 예
  5. 상속의 사용
  6. 상속의 계층 구조
  7. 상속의 코드 중복 줄이기
  8. 상속에서의 접근 지정자(접근 제한자)
  9. 메소드 재정의(오버라이딩)
  10. 상속시 부모 클래스의 생성자
  11. 부모클래스 명시적 호출
  12. 묵시적인 호출
  13. Object 클래스
  14. Object의 메소드
  15. finalize()메소드
  16. 종단 클래스와 종단 메소드
반응형

상속

  • 상속이란?
  • 상속의 사용
  • 메소드 재정의
  • 접근 지정자
  • 상속과 생성자
  • Object 클래스
  • 종단 클래스

상속은 코드를 재사용하기 위한 중요한 기법

상속의 개념

  • 상속의 개념은 현실 세계에도 존재한다.

Untitled.png

상속의 장점

  • 상속을 통하여 기존 클래스의 필드와 메소드를 재사용한다.
  • 기존 클래스의 일부 변경도 가능(오버라이딩)
  • 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성할 수 있다.
  • 상속은 이미 작성된 검증된 소프트웨어를 재사용
  • 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수 가능
  • 코드의 중복을 줄일 수 있다.

상속

Untitled.png

  • 부모 클래스를 수퍼 클래스라고 부르고, 자식 클래스를 서브 클래스라고 부른다.

상속의 예

Untitled.png

  • is - a 의 관계

상속의 사용

public class Car {
	int speed;
	int gear;
	public String color;

	public void speedUp(int s) {
		speed += s;
	}

	public void speedDown(int s) {
		speed -= s;
	}

	...
}

class sportCar extends Car { // 스포츠카는 Car 클래스를 상속한다.
	boolean turbo; // 추가한 필드

	public void setTurbo(boolean state) { // 추가한 메소드
		turbo = state;
	}
}

Untitled.png

public class TEST {
	public static void main(String[] args) {
		SportCar c = new SportCar();
		c.color = "Red";  // 상속받은 필드 사용
		c.speedUp(100);   // 상속받은 메소드 사용
		c.speedDown(30);  // 상속받은 메소드 사용
		c.setTurbo(true); // 자체 메소드 사용

상속의 계층 구조

Untitled.pngUntitled.png

상속의 코드 중복 줄이기

Untitled.png

상속에서의 접근 지정자(접근 제한자)

  • private는 해당 클래스만 사용가능하기 때문에 상속을 받은 서브클래스도 수퍼클래스의 private를 사용을 하지 못한다.

메소드 재정의(오버라이딩)

  • 메소드 재정의(method overriding) : 서브 클래스가 필요에 따라 상속된 메소드를 다시 정의하는 것
class Animal {
	public void speak() { 
		System.out.println("??");
	}
}

class Dog extents Animal {
	@Override
	public void speak() { // 메소드 재정의
		System.out.println("멍멍");
	}
}
  • Dog class의 speak를 호출하면 수퍼클래스의 speak 메소드가 아니라 Dog의 speak 메소드가 호출된다.
  • 메소드의 재정의를 의도한다는 것을 컴파일러에게 명시적으로 전달하기 위해 재정의하는 메소드 위에 “@Override” 라는 문장을 달아준다.

상속시 부모 클래스의 생성자

Untitled.png

  • 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자가 호출되지 않으면 자동으로 부모 클래스의 default 생성자가 호출된다.
  • 만약 부모클래스의 디폴트 생성자가 없는 경우 명시적으로 부모클래스의 다른 생성자를 호출해줘야한다.

부모클래스 명시적 호출

class Animal {
	public Animal(String msg) {
		System.out.println(msg);
	}
}

class Dog extents Animal {
	public Dog() {
		super("Dog에서 호출");
		System.out.println("Dog 호출");
	}
}

👉 Dog에서 호출
Dog 호출

묵시적인 호출

class Animal {
	public Animal() {
		System.out.println("Animal 호출");
	}
}

class Dog extents Animal {
	public Dog() {
		// Animal 디폴트 생성자 묵시적 호출
		System.out.println("Dog 호출");
	}
}

👉 Animal 호출
Dog 호출

  • Animal의 디폴트 생성자가 존재하여 컴파일러가 자동으로 Animal()을 호출하여줌

Object 클래스

  • Object 클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스

Untitled.png

Object의 메소드

  • protected Object clone()
    • 객체 자신의 복사본을 생성하여 반환한다.
  • public boolean equals(Object obj)
    • obj가 이 객체와 같은지를 나타낸다.
  • protected void finalize()
    • 가비지 콜렉터에 의하여 호출된다.
  • public final Class getClass()
    • 객체를 생성한 클래스 정보를 반환한다.
  • public int hashCode()
    • 객체에 대한 해쉬 코드를 반환한다.
  • public String toString()
    • 객체의 문자열 표현을 반환한다.

finalize()메소드

  • Object 클래스는 finalize()라는 콜백(callback) 메소드를 정의한다.
  • 이것은 객체가 소멸되기 직전에 호출된다.
  • Object 클래스의 finalize()에서는 아무 것도 하지 않지만 서브 클래스에서 재정의하여서 자원을 반납하는 등의 정리 과정을 실행할 수 있다

종단 클래스와 종단 메소드

  • final 을 붙이면 상속이나 재정의가 불가능하다.

Untitled.png

반응형
  1. 상속의 개념
  2. 상속의 장점
  3. 상속
  4. 상속의 예
  5. 상속의 사용
  6. 상속의 계층 구조
  7. 상속의 코드 중복 줄이기
  8. 상속에서의 접근 지정자(접근 제한자)
  9. 메소드 재정의(오버라이딩)
  10. 상속시 부모 클래스의 생성자
  11. 부모클래스 명시적 호출
  12. 묵시적인 호출
  13. Object 클래스
  14. Object의 메소드
  15. finalize()메소드
  16. 종단 클래스와 종단 메소드
'공부/Java' 카테고리의 다른 글
  • [Java]자바 프로그래밍(인터페이스와 다형성)
  • [Java]자바 프로그래밍(배열)
  • [Java]자바 프로그래밍(생성자와 접근제어)
  • [Java]자바 프로그래밍(필드와 메소드2)
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • docker
  • SpringBoot
  • 자바빈즈
  • 프로그래밍
  • 코틀린기본문법
  • ViewModel
  • android studio 삭제
  • webhacking
  • Database
  • shared preference
  • 알고리즘
  • spring
  • native app
  • jsp
  • Android Studio
  • 키 해시
  • Java
  • 1.9.22
  • Computer science
  • api 통신
  • cs
  • 디버깅키해시
  • 자료구조
  • 보안
  • dreamhack
  • Kotlin
  • React
  • Python
  • 컴퓨터
  • 상속

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Java]자바 프로그래밍(상속)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.