ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Github
  • Python
  • java base
  • 알고리즘
  • 커밋
  • java
  • binarySearch
  • 정렬
  • java.lang
  • 자바
  • java.net
  • java 기초
  • README.md
  • staged
  • 합병정렬
  • 파이썬
  • matplotlib
  • git add.
  • string to int
  • git

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java] 추상클래스 abstract class, final
Java/Java(base)

[Java] 추상클래스 abstract class, final

2021. 12. 1. 00:42

추상 클래스

  • 클래스들의 틀 (틀 자체의 틀)
  • 추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 상속받아서 하위클래스에서 구현되도록 설계된 클래스이다.
  • 추상 클래스(부모)는 클래스(자식)의 공통 요소들을 가상화시켜놓기 때문에 객체화시 구현(재정의)을 꼭 해야한다.
  • 부모 추상 클래스의 역할은 단지 자식 클래스들을 만들 때 도와주는 역할을 수행한다.
  • 자식 클래스에서 만들어질 메소드의 이름과 형태만 가지고 있다.
  • 메소드에 {}바디가 없다. 이런 메소드를 추상 메소드라고 하며 abstract 키워드가 리턴타입 앞에 붙는다.
  • 추상 메소드가 하나라도 포함되어 있다면 추상 클래스로 만들어야 한다.

추상 클래스 선언

abstract class 추상클래스명{
    abstract 리턴타입 추상메소드명();

    리턴타입 일반메소드명(){ 메소드내용 };
}
  • 추상 메소드는 자식 클래스에서 강제적으로 반드시 재정의 되어야 한다.

    • 자식클래스를 생성할 때, 재정의하지 않으면 오류 -> 재정의에 대한 강제성 부여
  • 일반 메소드도 추상 클래스 내부에서 존재할 수 있다.

final : 재정의되어서는 안되는 메소드에 사용

abstract class 가 아니어도 사용 가능

abstract class 추상클래스명{
    abstract 리턴타입 추상메소드명();

    리턴타입 일반메소드명(){ 메소드내용 };

    final 리턴타입 메소드명(){ 메소드 내용};
}

Ex) Abstract class 사용

  • abstract class Shape
public abstract class Shape {
    double height;
    double width;

//넓이는 각 도형마다 공식이 다르다.    
//    double getArea() { 
//        return height * width;
//    }
    abstract double getArea();

    final void init() {
        System.out.println("나는 도형입니다.");
    }

    void getName() {
        System.out.println("저는 도형이에요");
    }
}
  • 자식클래스 class Tri
public class Tri extends Shape{
    @Override
    double getArea() {
        return width*height/2;
    }

    @Override
    void getName() {
        System.out.println("저는 삼각형이에요");
    }

//    final 메소드는 사용 불가능
//    void init() {
//    }
}

'Java > Java(base)' 카테고리의 다른 글

[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class  (0) 2021.12.01
[Java] 인터페이스 interface, 다중 상속, 마크 인터페이스  (0) 2021.12.01
[Java]접근 권한 제어자 public, private, protected, default / getter, setter  (0) 2021.11.30
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof  (0) 2021.11.30
[Java] static (정적) : 모든 객체가 공유  (0) 2021.11.29
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class
    • [Java] 인터페이스 interface, 다중 상속, 마크 인터페이스
    • [Java]접근 권한 제어자 public, private, protected, default / getter, setter
    • [Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바