logo

Java의 추상 클래스

abstract 키워드로 선언된 클래스를 추상 클래스라고 합니다. 자바 . 추상 메소드와 비추상 메소드(본문을 사용한 메소드)가 있을 수 있습니다.

자바 추상 ​​클래스를 배우기 전에 먼저 자바의 추상화에 대해 이해해보자.

nfa를 dfa로 변환하다

Java의 추상화

추출 구현 세부 사항을 숨기고 사용자에게 기능만 표시하는 프로세스입니다.

또 다른 방법은 사용자에게 꼭 필요한 것만 표시하고 내부 세부 정보(예: 텍스트를 입력하고 메시지를 보내는 곳에 SMS 보내기)를 숨기는 것입니다. 메시지 전달에 대한 내부 처리를 알 수 없습니다.

추상화를 사용하면 무엇에 집중할 수 있나요? 물체 대신에 어떻게 합니까?

추상화를 달성하는 방법

Java에서 추상화를 수행하는 방법에는 두 가지가 있습니다.

  1. 추상 클래스(0~100%)
  2. 인터페이스(100%)

Java의 추상 클래스

abstract로 선언된 클래스는 다음과 같이 알려져 있습니다. 추상 수업 . 추상 메소드와 비추상 메소드가 있을 수 있습니다. 확장되어야 하고 그 방법이 구현되어야 합니다. 인스턴스화할 수 없습니다.

기억해야 할 점

  • 추상 클래스는 추상 키워드를 사용하여 선언해야 합니다.
  • 추상 메소드와 비추상 메소드가 있을 수 있습니다.
  • 인스턴스화할 수 없습니다.
  • 그것은 가질 수 있습니다 생성자 정적 메서드도 마찬가지입니다.
  • 하위 클래스가 메서드 본문을 변경하지 않도록 하는 최종 메서드를 가질 수 있습니다.
Java 추상 클래스 규칙

추상 클래스의 예

 abstract class A{} 

Java의 추상 메소드

추상으로 선언되고 구현이 없는 메서드를 추상 메서드라고 합니다.

추상 메소드의 예

 abstract void printStatus();//no method body and abstract 

추상 메서드가 있는 추상 클래스의 예

이 예에서 Bike는 하나의 추상 메서드 실행만 포함하는 추상 클래스입니다. 구현은 Honda 클래스에서 제공됩니다.

삽입 정렬 자바
 abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } } 
지금 테스트해보세요
 running safely 

Abstract 클래스의 실제 시나리오 이해

이 예제에서 Shape는 추상 클래스이며 해당 구현은 Rectangle 및 Circle 클래스에서 제공됩니다.

대부분 우리는 구현 클래스(최종 사용자에게는 숨겨져 있음)에 대해 알지 못하며 구현 클래스의 객체는 팩토리 메소드 .

팩토리 메소드 클래스의 인스턴스를 반환하는 메서드입니다. 팩토리 메소드에 대해서는 나중에 배우겠습니다.

이 예제에서는 Rectangle 클래스의 인스턴스를 생성하면 Rectangle 클래스의 draw() 메서드가 호출됩니다.

파일: TestAbstraction1.java

 abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } } 
지금 테스트해보세요
 drawing circle 

Java의 Abstract 클래스의 또 다른 예

파일: TestBank.java

 abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }} 
지금 테스트해보세요
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

생성자, 데이터 멤버, 메서드를 포함하는 추상 클래스

추상 클래스에는 데이터 멤버, 추상 메서드, 메서드 본문(비추상 메서드), 생성자, 심지어 main() 메서드도 포함될 수 있습니다.

파일: TestAbstraction2.java

 //Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } } 
지금 테스트해보세요
 bike is created running safely.. gear changed 

규칙: 클래스에 추상 메서드가 있으면 해당 클래스는 추상 클래스여야 합니다.

 class Bike12{ abstract void run(); } 
지금 테스트해보세요
 compile time error 

규칙: 추상 메서드가 있는 추상 클래스를 확장하는 경우 메서드 구현을 제공하거나 이 클래스를 추상화해야 합니다.


추상 클래스의 또 다른 실제 시나리오

추상 클래스를 사용하여 다음의 일부 구현을 제공할 수도 있습니다. 상호 작용 . 이러한 경우 최종 사용자는 인터페이스의 모든 메서드를 재정의하도록 강요되지 않을 수 있습니다.

참고: Java 초보자라면 먼저 인터페이스를 배우고 이 예제를 건너뛰세요.

 interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} 
지금 테스트해보세요
 Output:I am a I am b I am c I am d