Java의 Abstract Class

자바의 추상 클래스는 인터페이스와 유사하지만 기본 메소드 구현이 포함될 수 있다. 추상 클래스는 몸체가 없는 추상 메소드를 포함할 수 있으며, 구현된 메소드도 가질 수 있다. 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 어노테이션을 사용해야 하는 이유에 대해 더 읽어보세요.

자바에서의 추상 클래스 중요한 점

  1. abstract 키워드는 자바에서 추상 클래스를 생성하는 데 사용됩니다.
  2. 자바에서 추상 클래스는 인스턴스화할 수 없습니다.
  3. 추상 메서드를 생성하려면 abstract 키워드를 사용하며, 추상 메서드는 본문이 없습니다.
  4. 클래스에 추상 메서드가 있는 경우 해당 클래스도 추상 클래스여야 하며, 그렇지 않으면 컴파일되지 않습니다.
  5. 추상 클래스가 추상 메서드를 선언하지 않아도 됩니다. 추상 메서드를 선언하지 않은 상태로 클래스를 추상 클래스로 표시할 수 있습니다.
  6. 추상 클래스에 메서드 구현이 없으면 인터페이스를 사용하는 것이 좋습니다. 자바는 다중 클래스 상속을 지원하지 않기 때문입니다.
  7. 자바에서 추상 클래스의 하위 클래스는 추상 메서드를 모두 구현해야 합니다. 단, 하위 클래스가 또한 추상 클래스인 경우에는 예외입니다.
  8. 인터페이스의 모든 메서드는 인터페이스 메서드가 static이거나 default가 아닌 한 암묵적으로 추상화됩니다. 인터페이스의 static 메서드와 default 메서드는 Java 8에서 추가되었습니다. 자세한 내용은 Java 8 인터페이스 변경 내용을 참조하십시오.
  9. Java 추상 클래스는 인터페이스 메서드의 구현을 제공하지 않고도 인터페이스를 구현할 수 있습니다.
  10. Java 추상 클래스는 모든 하위 클래스에 공통 메서드 구현을 제공하거나 기본 구현을 제공하기 위해 사용됩니다.
  11. Java에서 추상 클래스는 main() 메서드가 있다면 다른 클래스와 마찬가지로 실행할 수 있습니다.

이것이 Java에서 추상 클래스에 대한 모든 내용입니다. 빠뜨린 중요한 내용이 있다면 댓글로 알려주세요.

Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java