BlueHarmel
BlueHarmel Devlog
BlueHarmel
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (330)
    • Book (11)
    • Dev (29)
      • ArtCon (0)
      • ESTsoft 오르미 (29)
    • Study (290)
      • Web (18)
      • AWS (2)
      • 알고리즘 (1)
      • GameDev (1)
      • 정보처리기사 (201)
      • English (1)
      • Mathematics (24)
      • 머신러닝 (7)
      • 딥러닝 (10)
      • 네트워크 보안 (5)
      • R (4)
      • 컴퓨터 네트워크 (6)
      • 데이터베이스 (8)
      • 데이터 통신 (0)
      • 운영체제 (2)
      • TIL (0)
    • Project (0)
      • 개인 (0)
      • 단체 (0)

인기 글

hELLO · Designed By 정상우.
BlueHarmel

BlueHarmel Devlog

Dev/ESTsoft 오르미

상속

2024. 2. 23. 10:58

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)
      • 상속된 부모 메소드 내용이 자식 클래스에 맞지 않으면, 자식 클래스에서 동일한 메소드를 재정의하는 것
      • 메소드가 오버라이드되면 부모 객체의 메소드는 숨겨지므로 자식 메소드가 호출된다.
      • 규칙
        1. 부모의 메소드와 동일한 시그니처(리턴타입, 메소드 이름, 매개변수 리스트)를 가져야 한다.
        1. 부모 클래스의 메소드보다 접근 제한을 더 강하게 오버라이딩 할 수는 없다. (예외, 접근제어자 둘 다 부모보다 같거나 큰 범위여야한다)
        1. 새로운 예외(Exception)를 throws 할 수 없다. (예외처리 파트에서 배움)

        • 접근제한을 더 강하게 오버라이딩 할 수 없다는 것은 부모 메소드가 public 접근 제한을 갖고 있을경우 오버라이딩 하는 자식 메소드는 default나 private 접근제한으로 수정할 수 없다는 뜻
        • 여기서 반대로는 가능하다. 만약 부모 메소드가 default 접근 제한을 갖는다면 재정의되는 자식 메소드는 default 또는 public 접근 제한을 가질 수 있다.

5. 추상 클래스

  • 설명내용
    • 추상 메소드
      • 자식 클래스에서 반드시 오버라이드 해야만 사용할 수 있는 메소드
      • 사용 이유 : 자식 클래스에서 반드시 추상메서드를 구현하도록 한다
      abstract 리턴타입 메소드명();
    • 추상 클래스
      • 실체들의 공통되는 특성을 가지고 있는 것을 클래스로 따로 빼둔것
      • 삼성, 현대, LG (회사)
      • 새, 곤충, 물고기 (동물)
      • 일반 클래스와 달리 객체를 직접 생성해 사용하지 못한다.
        • new 연산자를 사용해서 인스턴스를 생성하지 못한다.
        Animal animal = new Animal(); (X)
      • 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용
        class Ant extends Animal { ... }
    • 추상 클래스의 용도
      1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일
        1. 여러사람이 함께 설계하는 경우, 필드나 메소드명을 제약하는 효과
      1. 실체 클래스를 작성할 때 시간을 절약
        1. 공통되는 필드와 메소드를 추상 클래스에 선언해 시간 절약
      1. 설계 규격을 통일하고 오류나 실수 없이 구현하기 위해
    • 추상 클래스의 선언
      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”라는 클래스를 상속받는다.
      • https://tcpschool.com/java/java_api_object
      • 따라서 상속을 받지 않더라도 Object 클래스의 요소들을 사용하거나 Override할 수 있다.

7. Daily Quiz

Daily Quiz 02/01

'Dev > ESTsoft 오르미' 카테고리의 다른 글

JVM 조사 : ClassLoader  (1) 2024.02.23
인터페이스  (0) 2024.02.23
클래스  (0) 2024.02.23
참조자료형  (0) 2024.02.22
연산자 / 조건문과 반복문  (0) 2024.02.22
    BlueHarmel
    BlueHarmel
    Interested in Mathematics, Foreign Language, and "Programming"

    티스토리툴바