자바의 추상 클래스는 인터페이스와 유사하지만 기본 메소드 구현이 포함될 수 있다. 추상 클래스는 몸체가 없는 추상 메소드를 포함할 수 있으며, 구현된 메소드도 가질 수 있다. abstract
키워드는 추상 클래스와 메소드를 생성하는 데 사용된다. 자바에서 추상 클래스는 인스턴스화할 수 없다. 추상 클래스는 주로 하위 클래스가 추상 메소드를 확장하고 구현하며 추상 클래스의 구현된 메소드를 재정의하거나 사용할 수 있도록 기본을 제공하는 데 사용된다.
여기에 자바의 추상 클래스에 대한 간단한 예제가 있다.
package com.journaldev.design;
//추상 클래스
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//추상 메소드
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
work()
가 몸체가 없는 추상 메소드임을 주목하십시오. 여기에 자바에서 추상 클래스를 확장하는 구체적인 클래스 예제가 있다.
package com.journaldev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//추상 클래스를 기반으로 코딩
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//추상 클래스에서 구현된 메소드 사용 - 상속
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
주의하세요. 하위 클래스 Employee는 상위 클래스 Person의 속성과 메서드를 상속받으며, 자바에서의 상속을 사용합니다. 또한 Employee 클래스에서 Override 어노테이션을 사용하는 것에 주목하세요. 메서드를 오버라이딩할 때 항상 Override 어노테이션을 사용해야 하는 이유에 대해 더 읽어보세요.
자바에서의 추상 클래스 중요한 점
abstract
키워드는 자바에서 추상 클래스를 생성하는 데 사용됩니다.- 자바에서 추상 클래스는 인스턴스화할 수 없습니다.
- 추상 메서드를 생성하려면
abstract
키워드를 사용하며, 추상 메서드는 본문이 없습니다. - 클래스에 추상 메서드가 있는 경우 해당 클래스도 추상 클래스여야 하며, 그렇지 않으면 컴파일되지 않습니다.
- 추상 클래스가 추상 메서드를 선언하지 않아도 됩니다. 추상 메서드를 선언하지 않은 상태로 클래스를 추상 클래스로 표시할 수 있습니다.
- 추상 클래스에 메서드 구현이 없으면 인터페이스를 사용하는 것이 좋습니다. 자바는 다중 클래스 상속을 지원하지 않기 때문입니다.
- 자바에서 추상 클래스의 하위 클래스는 추상 메서드를 모두 구현해야 합니다. 단, 하위 클래스가 또한 추상 클래스인 경우에는 예외입니다.
- 인터페이스의 모든 메서드는 인터페이스 메서드가 static이거나 default가 아닌 한 암묵적으로 추상화됩니다. 인터페이스의 static 메서드와 default 메서드는 Java 8에서 추가되었습니다. 자세한 내용은 Java 8 인터페이스 변경 내용을 참조하십시오.
- Java 추상 클래스는 인터페이스 메서드의 구현을 제공하지 않고도 인터페이스를 구현할 수 있습니다.
- Java 추상 클래스는 모든 하위 클래스에 공통 메서드 구현을 제공하거나 기본 구현을 제공하기 위해 사용됩니다.
- Java에서 추상 클래스는
main()
메서드가 있다면 다른 클래스와 마찬가지로 실행할 수 있습니다.
이것이 Java에서 추상 클래스에 대한 모든 내용입니다. 빠뜨린 중요한 내용이 있다면 댓글로 알려주세요.
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java