logo

Java 추상 키워드

abstract 키워드는 Java에서 추상화를 달성하는 데 사용됩니다. 추상 클래스와 메소드를 생성하는 데 사용되는 비액세스 한정자입니다.

추상 클래스의 역할은 추상 메서드를 포함하는 것입니다. 그러나 추상이 아닌 메서드도 포함될 수 있습니다. 추상 키워드로 선언되고 구현이 없는 메서드를 추상 메서드라고 합니다.

통사론:-

 abstract class Employee { abstract void work(); } 

참고 - 추상이 아닌 클래스에서는 추상 메서드를 선언할 수 없습니다.

추상 키워드의 규칙

하지 말아야 할 것

  • 추상 키워드는 변수 및 생성자와 함께 사용할 수 없습니다.
  • 클래스가 추상이면 인스턴스화할 수 없습니다.
  • 메소드가 추상이면 본문이 포함되지 않습니다.
  • abstract 키워드를 다음과 함께 사용할 수 없습니다. 결정적인 .
  • 추상 메서드를 다음과 같이 선언할 수 없습니다. 사적인 .
  • 추상 메서드를 다음과 같이 선언할 수 없습니다. 공전 .
  • 추상 메서드는 동기화할 수 없습니다.

해야 할 일

  • 추상 키워드는 클래스 및 메서드에만 사용할 수 있습니다.
  • 추상 클래스에는 생성자와 정적 메서드가 포함될 수 있습니다.
  • 클래스가 추상 클래스를 확장하는 경우 추상 메서드 중 하나 이상도 구현해야 합니다.
  • 추상 클래스에는 기본 메서드와 최종 메서드가 포함될 수 있습니다.
  • 추상 클래스에는 오버로드된 추상 메서드가 포함될 수 있습니다.
  • 로컬 내부 클래스를 추상으로 선언할 수 있습니다.
  • throw 절을 사용하여 추상 메서드를 선언할 수 있습니다.

추상 키워드의 예

예제 1: 추상 메소드를 포함하는 추상 클래스

 abstract class Vehicle { abstract void bike(); } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample1 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); } } 
지금 테스트해보세요

산출:

 Bike is running 

예제 2: 추상 및 비추상 메서드를 포함하는 추상 클래스

 abstract class Vehicle { abstract void bike(); void car() { System.out.println('Car is running'); } } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample2 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); obj.car(); } } 
지금 테스트해보세요

산출:

 Bike is running Car is running 

예제 3: 생성자를 포함하는 추상 클래스

 abstract class Vehicle { String msg; Vehicle(String msg) { this.msg=msg; } void display() { System.out.println(msg); } } class Honda extends Vehicle { Honda(String msg) { super(msg); } } public class AbstractExample3 { public static void main(String[] args) { Honda obj=new Honda('Constructor is invoked'); obj.display(); } } 
지금 테스트해보세요

산출:

 Constructor is invoked 

예제 4: 오버로드된 추상 메소드를 포함하는 추상 클래스

 abstract class Vehicle { abstract void display(); abstract void display(String msg); } class Honda extends Vehicle { @Override void display() { System.out.println('abstract method is invoked'); } @Override void display(String msg) { System.out.println(msg); } } public class AbstractExample4 { public static void main(String[] args) { Honda obj=new Honda(); obj.display(); obj.display('overloaded abstract method is invoked'); } } 
지금 테스트해보세요

산출:

 abstract method is invoked overloaded abstract method is invoked 

예제 5: 내부 추상 클래스

 class Vehicle { abstract class Car { abstract void display(); } class Honda extends Car { @Override void display() { System.out.println('inner abstract class is invoked'); } } } public class AbstractExample5 { public static void main(String[] args) { Vehicle obj=new Vehicle(); Vehicle.Car c=obj.new Honda(); c.display(); } } 
지금 테스트해보세요

산출:

 inner abstract class is invoked 

예제 6: 중첩된 추상 클래스

 abstract class Vehicle { abstract class Car { abstract void display(); } } class Honda extends Vehicle { class FourWheller extends Car { @Override void display() { System.out.println('nested abstract class is invoked'); } } } public class AbstractExample6 { public static void main(String[] args) { Vehicle obj=new Honda(); Honda h=(Honda)obj; Honda.FourWheller fw=h.new FourWheller(); fw.display(); } } 
지금 테스트해보세요

산출:

 nested abstract class is invoked