생각기록
2023-03-07 java / 추상 클래스와 추상 메소드 본문
추상 클래스와 추상 메소드
추상 클래스
추상 메소드가 하나 이상 있으면, 추상 클래스
선언은 되어 있으나 구현되어 있지 않은 메소드
ㅡ> function 함수명() { 구현부 } /
public class ClassName {
이 부분이 메소드
pubic void test() 선언부
{ } 구현부 => 선언o / 구현 x
}
구현 방법
선언부와 class 선언 부에도 abstract를 넣는다.
public abstract class ClassName {
public abstract void test();
}
추상 메소드만 있어도 가능
public abstract class ClassName {
// public abstract void test();
}
추상 클래스의 구현
abstract 키워드 사용


자식클래스에서 오버라이딩 / 일반클래스가 될 수 있다.
- 추상 메소드를 갖는 클래스가 추상 클래스가 됨
- 추상 메소드 없이도 추상 클래스를 만들 수 있음.
- 추상 클래스를 상속받는 서브 클래스에서 추상 메소드를 오버라이딩 해줘야 함!

추상클래스로는 객체를 만들 수 없다.
왜 지정할 수 없냐? 클레스네임이 추상클래스이기 떄문
추상 클래스의 용도
설계와 구현 분리
클레스 네임이란건 설계입니다

하위 클래스에서 객체를 만든다?
package java_first_project;
public abstract class ClassName {
// 추상클래스
public abstract void test();
public void test1() {
}
}
package java_first_project;
// 얘로 객체를 만들고싶음
// 부모클래스가 오버라이딩 > 오버라이딩: 부모것의 내용만 바꾸는 것
public class SubClass extends ClassName {
// 추상클래스를 구현하기 전까지는 자식클래스도 추상클래스가 되어야 한다
// 자식클래스가 부모클래스가 가진 모든 추상클래스를 구현해야 한다 그렇지 않으면, 자식클래스도 추상클래스가 되어야 한다.
public void test() {};
}
만약 부모에 추상 메소드가 하나 더 추가해서 자식에 모두 구현 안됬다면 이렇게 오류가 뜸

방법 1 > 자식에서 test2() {} ; 중괄호 오버라이딩 하거나

방법 2 > abstract 를 클래스 선언부에 해준다 => 하지만 추상클래스가 되어 객체를 만들 수 없다는 점

그냥 부모에 있는 모든 메소드를 구현하도록 하자
슈퍼 클래스에서는 개념 정의
추상클래스 개념 정리
1. 추상 메소드를 하나라도 가지고 있으면, 그 클래스는 추상클래스가 된다.
2. 추상 클래스로는 객체를 만들 수 없다. ㅡ> 붕어빵 틀만 있음
3. 추상 클래스를 상속받는 서브 클래스도 기본적으로 추상클래스가 될거임
왜냐? 부모에 있는 추상 메소드를 자신이 가지고 있을 거기 때문에 (= 상속받기 때문에)
4. 서브 클래스로 객체를 만들고 싶다면, 부모클래스에 있는 모든 추상메소드를 "구현" 해야함.
어떻게? 부모클래스의 추상 메소드를 오버라이딩 해서!
실습 추상클래스 실습

인터페이스
- 추상 메소드의 모음
- 여러 구현체에서 공통적인 부분을 추상화 하는 역할
- 서브 클래스가 같은 동작을 한다는 것을 보장하기 위해 사용
=> 인터페이스를 상속받는 클래스는 무조건 추상메소드를 구현해야만 한다.
추상클래스와 다른점
- 추상 클래스는 추상 메소드가 없어도 상관 없다.
- 하지만 인터페이스는 무조건 있어야 함!!
- 메소드를 구현하지 못 함. 추상 메소드만 존재
인터페이스 문법
클래스가 아님.
package java_first_project;
// 인터페이스
// 추상메소드의 모음
public interface InterfaceTest {
// 인터페이스는 일반 변수를 선언할 수 없다. !단, 상수는 변할수없는 값들은 가능
// public int num;
public final int num = 1; // 상수 선언은 final 과 초기화
//interface는 어차피 추상메소드여서 abstract 생략 가능
public void test();
public void test1(int num);
// 추상메소드는 구현부가 있으면 오류가 생김
// public int aaaa() {
//
// };
}
- class 대신 interface를 쓰고
- 상속시에 extends가 아닌, implements를 씁니다.
- 기본적으로 public 키워드를 가지고있어, 생략 가능
- 기본적으로 추상메소드여서 abstract 생략 가능


상수 => public final 생략가능 / 초기화를 안하면 오류 있다
위의 사진을 상속 받는 삼성 클래스

기능은 같은데 phone / 세세한 구현은 상속받는 클래스 삼성에서 한다.
@Overide => 코드가 헷갈릴때 표기하면 좋습니다. 명시적인것
sendCall()
if(무음)...
자바는 클래스를 상속받을때 다중상속이 불가능 합니다.
다중상속이란 두 개 이상의 클래스, 추상클래스는 ㄴㄴ
근데 인터페이스는 가능
인터페이스는 강제
'SeSAC 풀스택 > JAVA &Spring boot' 카테고리의 다른 글
| 2023-03-09 Spring Boot 시작 / Intellij / MVC / Thymeleaf 문법 (0) | 2023.03.09 |
|---|---|
| 2023-03-04 java / 클래스의 상속 / 오버라이딩 (0) | 2023.03.04 |
| 2023-03-02 java 클래스 / 객체지향 프로그래밍 / getter, setter / static (1) | 2023.03.02 |
| 2023-03-02 java 예외 처리 / try-catch-finally (0) | 2023.03.02 |
| 2023-03-02 java 표준 배열 (0) | 2023.03.02 |