• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (328)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (14)
      • 리눅스 (5)
      • 자바 (75)
        • spring (7)
      • js (35)
      • 오라클 (39)
        • PLSQL (3)
      • cs (5)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 추상 클래스
        2024년 07월 23일
        • chantleman
        • 작성자
        • 2024.07.23.:27

        2024.07.23 - [자바] - 오버라이딩. 다형성

         

        오버라이딩. 다형성

        - 최상위 클래스public class Animal { public void cry() { } public void sing() { }}    - Animal 클래스를 상속받음public class Cat extends Animal{ @Override public void cry() { System.out.println("야옹~"); }}   - Animal 클래스를 상

        chantleman.tistory.com

        지난 시간에 만들었던 Animal 클래스처럼

        상위 클래스 메소드에 아무 내용도 없고 설계만 하는 경우 추상클래스를 이용합니다.

         

         

        public class Animal {
        
        	public void cry() {
            
        	}
        	public void sing() {
        		
        	}
        }

        이런 식으로 설계만 하는 경우에는 메소드를 만들 필요가 없기 때문에 아래와 같이 추상 메소드로 만듭니다.

         

        public abstract void cry();

         

        추상 메소드가 만들어지면 해당 클래스는 구현할 수 없습니다.(객체로 구현 불가능) 

        따라서 클래스도 abstract를 통해 추상 클래스로 만들어줘야 합니다.

        public abstract class Animal {
        
        	public abstract void cry();
        	public void sing() {
        		
        	}
        }

        하지만 추상 메소드를 만들었다고 해서 그 클래스안에 있는 모든 메소드가 다 추상 메소드일 필요는 없습니다.

         

         

        부모가 추상클래스이면 자식클래스에서 해야할 것이 있는데

         

        1. 자식도 abstract를 통해서 추상클래스로 바꾸고 넘기던지

        2. 부모클래스에 있는 추상 메소드를 자식에서 구현해주던지

         

        public class Cat extends Animal{
        	
        	@Override
        	public void cry() {
        		System.out.println("야옹~");
        	}
        }

        이렇게 cry메소드를 구현해주던지

         

        public abstract class Cat extends Animal{
        	
        }

         

        자식 클래스도 추상클래스로 바꿔서 자식클래스에게 넘겨주면 됩니다.

        public class Sedan extends Car {
            @Override
            public void run() {
                System.out.println("Sedan is running");
            }
        }

         

         


         

        근데 자식 클래스도 추상클래스로 바꿔버리면

        어차피 그 자식의 자식에서 구현을 해야할텐데 왜 굳이 자식클래스를 추상클래스로 바꿔야하냐..

         

         

        • 단계적 구현: 추상 클래스를 여러 단계로 나눌 때, 일부 공통 기능을 중간 단계에서 정의하고, 구체적인 구현은 최종 단계에서 제공할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 각 단계에서 특정 기능을 확장하거나 오버라이드할 수 있습니다.
        • 설계의 명확성: 추상 클래스를 여러 단계로 나누면, 각 단계에서 제공하는 기능을 명확히 정의할 수 있습니다. 예를 들어, Vehicle 클래스는 모든 차량의 공통적인 기능을 정의하고, Car 클래스는 자동차에 특화된 기능을 정의하며, 최종적으로 Sedan 클래스에서 구체적인 구현을 제공합니다.
        • 기능의 확장성: 추상 클래스의 중간 단계에서 기능을 확장하거나 수정할 수 있습니다. 이를 통해 특정 기능을 단계별로 추가하거나 변경할 수 있습니다.

         

        728x90

        '자바' 카테고리의 다른 글

        간단한 게시판 예제  (1) 2024.07.24
        인터페이스  (2) 2024.07.24
        오버라이딩. 다형성  (1) 2024.07.23
        ValueObject  (1) 2024.07.22
        lombok.jar  (0) 2024.07.22
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바