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