Java/Java 정리

추상(Abstract)

무르뇌 2022. 8. 21. 15:20

일반클래스(concreate class) => 콘크리트처럼 딱딱하게 굳어 구체화된 클래스

1. public class 클래스명

    { 구성요소}

2. 구성요소 ==> 변수, 메서드, 생성자 3가지

3. 객체 생성 가능

 

추상클래스(abstract class)

1. 추상클래스라고 해서 반드시 추상 메서드를 만들 필요는 없지만, 추상 메서드를 만들기 위해선 반드시 추상 클래스를 생성해야 한다.

2. public abstract class 클래스명{구성요소}

3. 구성요소 변수, 메서드, 생성자, 추상메서드(abstract method)

4. 객체 생성 불가 (new 불가) why? ==> 불완전한 클래스이기 때문.

불완전한 클래스에 대한 설명: 기능 구현이 미정이기 때문에 그렇다.

ex) 일반 메서드의 경우

public void a(){기능}

추상클래스의 경우

public abstract void a();

--> {} 중괄호가 없기 때문에 기능구현이 미정 = ==> 따라서 불완전한 메서드이고 new 연산을 할 수가 없다.

5. 따라서 다른 일반클래스의 도움을 받아 추상 클래스를 사용하게 된다.

==> 추상클래스를 부모 클래스로 지정하고, 자식 클래스를 이용하여 오버라이딩하여 반드시 재정의하고 사용한다.

정리하자면 추상메소드를 쓰는 궁극적인 이유는 메소드를 강제성으로 재정의하여 메소드에 대한 정의를 통일화한다고 보는게 맞다.(=메서드명의 통일화)

6. new 추상클래스()는 안되지만, 다형성(변수타입)으로는 가능하다.

ex) public class abstract Pet(){}...

Pet p = new Pet(); <<=== X

Pet p = new Dog(); < ==== O

UML 상 일반클래스와 같은 박스이지만, 폰트가 기울어진 폰트이다. ex) 일반클래스 : class, 추상클래스 : class

 

 

+++++오버라이딩 내용 추가+++++

추가로 오버라이딩이 불가한 경우는 다음과 같다.

부모 클래스에서 선언된 static 키워드 및 final 키워드는 오버 라이딩이 안된다

why? ==> static은 프로그램 시작 후 한 번 딱 생성이 된다. new 연산에 의한 코드는 힙에 올라가기 떄문에, static 시점에서 볼떈 만들어지지 않은 객체를 접근할 수 없다. 

 

+++++추상클래스 내용 추가+++++

1. *.java 파일로 만들어진다.

2. 자식클래서가 상속받아서 구성요소를 활용한다.(추상메서드 재정의 강제성)  ==> 추상클래스(부모) <ㅡ 일반클래스(자식) 상속관계, 단일상속

2. public abstract class 클래스명{}

4. 구성요소: 변수, 메서드, 생성자, 추상메서드

5. 추상클래스 목적: 자식 클래스들의 일관된 메서드를 사용하는게 목적(통일성)