[Java, 자바] 추상클래스와 추상메소드프로그래밍/Java2024. 6. 19. 22:29
Table of Contents
추상메소드(abstract method)
추상메소드란 선언은 되어 있으나 코드가 구현되어 있지 않은 메소드이고, abstract키워드를 선언하는 선언부만 존재하고 구현부는 작성하지 않고 사용합니다. 작성되어 있지 않은 구현부는 자식클래스에서 오버라이딩하여 사용합니다 !
abstract 반환타입 메소드명();
추상메소드 예시
public abstract String getSubject();
public abstract void setSubject(String s);
// 컴파일 오류
public abstract fail() {
return "bye";
}
추상클래스(abstract class)
추상메소드를 가지고 있으면 반드시 추상 클래스로 선언해야합니다. 추상클래스는 abstract 키워드로 선언합니다 !
추상클래스 선언
- 추상메소드를 포함하는 클래스
abstract class Animal{
public Sound() { }
public void action() {
eat();
}
abstract public void eat(); // 추상 메소드 선언
}
- 추상메소드가 없지만 abstract로 선언한 클래스
abstract class Animal {
String name;
public void setName(String name){
this.name = name;
}
}
추상 클래스는 객체를 생성할 수 없다.
- 추상메소드를 가진 추상클래스는 동작이 정의되어 있지 않으므로 인스턴스를 생성할 수 없습니다.
- 추상클래스는 먼저 상속을 통해 자식클래스를 만들고 자식클래스에서 추상메소드를 오버라이딩해야 인스턴스를 생성할 수 있습니다.
- 추상클래스의 객체를 생성하는 코드는 컴파일 오류가 발생합니다.
public class AbstractFail {
public static void main(String[] args){
Animal animal;
// 컴파일 오류
animal = Animal();
}
}
추상클래스 상속
추상클래스를 상속받는 자식클래스는 추상클래스가 됩니다. 또한 추상클래스의 추상메소드를 그대로 상속받기 때문에 오버라이딩을 하지 않으면 자식클래스에 abstract를 붙여 추상클래스임을 명시해야 컴파일 오류가 발생하지 않습니다.
추상메서드가 포함된 추상클래스를 상속받은 자식클래스는 추상메소드를 오버라이딩 해야만 인스턴스를 생성할 수 있습니다.
- 추상클래스 상속 시 abstract 선언
abstract class Animal{
public void Sound() {}
public void action() { eat(); }
abstract public void eat();
}
abstract class dog extends Animal{
public String toString() {
return "dog";
}
}
public class AbstractFail {
public static void main(String[] args) {
// 컴파일 오류
dog a = new dog();
}
}
추상클래스 상속 시 자식클래스 오버라이딩 구현
abstract class Animal{
public void Sound() {}
public void action() { eat(); }
abstract public void eat();
}
abstract class dog extends Animal{
@Override
public void eat(){
System.out.pintln("강아지 밥먹다");
}
}
public class AbstractFail {
public static void main(String[] args) {
dog a = new dog();
a.eat();
}
}
추상클래스의 구현 목적
- 추상메소드가 포함된 클래스를 상속받는 자식클래스가 반드시 오버라이딩하여 구현하기 위함입니다.
- 추상클래스는 추상메소드를 통해 자식클래스가 구현할 메소드를 명료하게 알려주는 인터페이스 역할을 합니다.
- 자식클래스는 추상메소드를 목적에 맞게 구현하는 다형성을 실현합니다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java, 자바] Object클래스에 관하여 (0) | 2024.06.23 |
---|---|
[Java, 자바] @JsonProperty, @JsonNaming이란? (0) | 2024.06.20 |
[Java, 자바] JVM의 동작원리와 기본개념 (0) | 2024.06.18 |
[Spring, Spring Boot] @Value가 null일 때의 원인과 해결 방법 (0) | 2024.06.17 |
[StringBoot] Azure 번역기 API 사용하기 (0) | 2024.06.12 |
@차나니 :: 차나니의 개발일지
개발의 모든 것 !
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!