Java 추상클래스(abstract class)
추상 클래스
추상 클래스는 미완성된 클래스를 뜻하며, 선언되어 있지만 구현되지 않은 미완성의 메소드(추상 메소드)를 포함하고 있는 클래스일 때 astract
키워드를 class 앞에 붙여 준다.
추상클래스는 추상메소드를 포함하고 있다는 것을 제외하고는 일반 클래스와 같다.
특징
- 미완성 클래스(abstract 키워드 사용)
자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성 - abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
abstract 메소드가 없어도 abstract 클래스 선언 가능 - 클래스 내에 일반 변수, 메소드 포함 가능
- 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능
장점
- 일관된 인터페이스 제공
- 꼭 필요한 기능 강제화(공통적이나 자식클래스에서 특수화 되는 기능)
추상 메소드
몸통({}
)이 없는 메소드를 의미하며, 상속 시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드이다.
abstract class Player { // 추상클래스
abstract void play(int pos); // 추상메소드
abstract void stop(); // 추상메소드
}
class AudioPlayer extends Player { // AudioPlayer : 완성된설계도 / Player : 미완성설계도
void play(int pos) { ... } // 추상메소드를 구현
void stop() { ... } // 추상메소드를 구현
}
abstract class AbstractPlayer extends Player {
void play(int pos) { ... } // 추상메소드를 구현
}
AudioPlayer ap = new AudioPlayer(); // OK
Player p = new AudioPlayer(); // OK
추상클래스 작성
여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 기존의 클래스의 공통적인 부분을 뽑아서 추상클래스로 만들어 상속하도록 하는 경우도 있다.
💡 추상화 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업 구체화 - 상속을 통해 클래스를 구현, 확장하는 작업package inherit.sample;
public abstract class Person {
private String name;
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void out();
}
package inherit.sample;
public class Student extends Person {
private String subject;
public Student() {
super();
}
public Student(String subject) {
super();
this.subject = subject;
}
public Student(String name, String subject) {
super(name);
this.subject = subject;
}
@Override
public void out() { // 상속받은 부모의 추상메소드는 반드시 오버라이딩 해야 함.
System.out.println(getName() + " 학생입니다.");
System.out.println(subject + "를 수강합니다.");
}
}
package inherit.sample;
public class Professor extends Person {
private String major;
public Professor() {
super();
}
public Professor(String major) {
super();
this.major = major;
}
public Professor(String name, String major) {
super(name);
this.major = major;
}
@Override
public void out() {
System.out.println(getName() + " 교수입니다.");
System.out.println(major + "를 전공합니다.");
}
}
package inherit.test;
import inherit.sample.Professor;
import inherit.sample.Student;
public class AbstractEx {
public static void main(String[] args) {
Student stu = new Student("홍길동", "자바");
Professor prof = new Professor("김춘추", "컴퓨터과학");
stu.out();
prof.out();
}
}
// 실행 결과
홍길동 학생입니다.
자바를 수강합니다.
김춘추 교수입니다.
컴퓨터과학를 전공합니다.
Author And Source
이 문제에 관하여(Java 추상클래스(abstract class)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dms873/Java-추상클래스abstract-class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)