생활코딩 - Java(abstract,final,interface)

2024. 4. 3. 22:47·Java & Spring/Java

□ abstract(추상 메소드)

추상 클래스는 상속을 강제하기 위한 것이다.

즉 상위 클래스에는 메소드의 시그니처만 정의해놓고

그 메소드의 실제 동작 방법은 이 메소드를 상속 받은 하위 클래스의 책임으로 위임하고 있다. 

 

abstract class A{

    public abstract int b();

    public void d(){

        System.out.println("world");

    }

}

 

메소드 b의 선언 부분에는 abstract라는 키워드가 등장하고 있다.

이 키워드는 메소드 b는 메소드의 시그니처만 정의 되어 있고

이 메소드의 구체적인 구현은 하위 클래스에서 오버라이딩 해야 한다는 의미다.

이렇게 내용이 비어있는 메소드를 추상 메소드라고 부른다.

추상 메소드를 하나라도 포함하고 있는 클래스는 추상 클래스가 되고, 자연스럽게 클래스의 이름 앞에 abstract가 붙는다.

 

※ 참고사항

  1. 본체가 있는 메소드는 abstract 키워드를 가질 수 없다.
    public abstract int c(){System.out.println("Hello")}
  2. 추상 클래스에는 추상메소드가 아닌 메소드가 존재 할 수 있다.
  3. 추상 클래스 A를 인스턴트화 하면 오류가 발생한다.

 → 3. 해결방법 :

클래스 A를 상속한 하위 클래스를 만들고 추상 메소드를 오버라이드해서 내용있는 메소드를 만들어야 한다.

클래스 B는 클래스 A를 상속했다 그리고 클래스 A의 추상 메소드인 메소드 b를 오버라이딩하고 있다.

 

□ final

■ final 필드

상기 코드에서 주석처리된 PI값을 변경하려는 코드는 오류가 발생한다.

이유는 상위 클래스에서 PI값을 final로 할당했기 때문이다.

 

■ final 메소드

final 메소드 b를 상속하려하기 때문에 오류

 

■ final 클래스

final 클래스 C를 상속하려하기 때문에 오류

 

□ interface

어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의  메소드들을 구현해야 한다.

만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 에플리케이션은 컴파일 조차 되지 않는다.

■ 하나의 클래스가 여러개의 인터페이스를 구현 할 수 있다.

■ 인터페이스도 상속이 된다.

■ 인터페이스의 맴버는 반드시 public이다.

 

 

 

출처 : 생활코딩 유튜브 : 

https://www.youtube.com/watch?v=Yv5Uw_vS3Uo&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=112

'Java & Spring > Java' 카테고리의 다른 글

생활코딩 - Java(예외 Exception)  (0) 2024.04.15
생활코딩 - Java(다형성)  (0) 2024.04.04
생활코딩 - Java(접근 제어자)  (0) 2024.04.02
생활코딩 - Java(유효범위)  (0) 2024.03.26
생활코딩 - Java(객체지향프로그래밍)  (0) 2024.03.25
'Java & Spring/Java' 카테고리의 다른 글
  • 생활코딩 - Java(예외 Exception)
  • 생활코딩 - Java(다형성)
  • 생활코딩 - Java(접근 제어자)
  • 생활코딩 - Java(유효범위)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스 java 기초 트레이닝
    Java 생성자
    자료구조
    java super
    java two-pointer
    개발로드맵
    java arrays.copyofrnage()
    java 세수의합
    java 멤버
    java
    java enhance switch
    java 유클리드 호제법
    프로그래머스 java 기초트레이닝
    java 에라토스테네스의 체
    데이터 크기
    java기초
    데이터 타입
    java 제어자
    java 메서드
    Java this
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
생활코딩 - Java(abstract,final,interface)
상단으로

티스토리툴바