쌓고 쌓다
[JAVA] 추상 클래스 본문
추상 메소드
추상 메소드는 선언은 되어 있으니 코드가 구현되어 있지 않는 껍데기만 있는 메소드이다.
상속에서 슈퍼 클래스로 사용되며 추상 메소드를 작성하기 위해 abstract 키워드를 사용한다.
public abstract String getName(); // 추상 메소드
public abstract setName(String str); // 추상 메소드
public abstract String fail() // 컴파일 에러 발생 ( 코드 작성이 이루어 지면 안됨 )
{
return "추상 클래스 실패";
}
추상 클래스가 되는 방법
1. 추상 메소드를 포함하는 클래스
abstract class Person{ // 추상 클래스 선언
abstract public void Speak(); // 추상 메소드 선언
}
추상 메소드를 가지고 있는 경우 그 클래스는 무조건 추상 클래스로 선언되어야 한다.
class Person{ // 추상 메소드가 있는데 그냥 클래스이므로 컴파일 에러
public abstract void Speak();
}
위와 같이 추상 메소드가 존재하는 경우 그 클래스 또한 추상 클래스로 선언해야 함.
2. 추상 메소드가 없지만 abstract로 선언된 클래스
abstract class Person{
public void Speak()
{
}
}
추상 메소드가 없더라고 추상 클래스로 선언이 가능하다.
추상 클래스는 객체 생성이 불가능
Person person; // 컴파일 문제 없음
person = new Person(); // 컴파일 에러
추상 클래스의 레퍼런스 변수를 생성하는 것은 에러가 안 나지만
추상 클래스 Person의 객체를 생성은 불가능하다.
추상 클래스의 상속
추상 클래스를 단순히 상속을 받는다면 그 서브 클래스는 상속 클래스가 된다.
추상 클래스의 추상 메소드를 그대로 상속받기 때문이다.
그러므로 아래 코드처럼 서브 클래스에도 abstract를 붙여 추상 클래스임을 명시해야 컴파일 에러가 안 난다.
abstract class Person{
public abstract void Speak();
}
abstract class Student extends Person{
}
추상 클래스를 상속받아 사용하려면,
서브 클래스에서 추상 클래스의 상속과 동시에 그 추상 메소드를 오버라이딩하여 실행 가능한 코드를 작성해야 한다.
abstract class Person{
public abstract void Speak();
}
class Student extends Person{
@Override
public void Speak()
{
System.out.println("학생입니다.");
}
}
추상 클래스는 서브 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스 역할을 하며,
추상 메소드를 목적에 맞게 구현하는 다형성을 실현할 수 있다.
또한 설계와 구현을 분리할 수 있어 구현 작업이 쉬워지고 계층적 상속 관계를 가지는 구조를 만들 때 적합하다.
추상 클래스를 받은 서브클래스는 추상 메소드를 꼭 구현해야 객체를 만들 수 있다.(강제)
'프로그래밍 > java' 카테고리의 다른 글
[JAVA] 리터럴 (0) | 2022.03.15 |
---|---|
[JAVA] 인터페이스(interface) (0) | 2021.12.28 |
[JAVA] 메소드 오버라이딩 / super 키워드 (0) | 2021.12.26 |
[JAVA] 업 캐스팅, 다운 캐스팅 / instanceof 연산자 (0) | 2021.12.25 |
[JAVA] super() 과 상속에서의 생성자 순서 (0) | 2021.12.25 |