산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 - 추상화

사전에 따라 추상화 이벤트보다는 아이디어를 다루는 품질입니다. 예를 들어, 이메일의 경우를 생각하면 이메일을 보내자마자 어떤 일이 일어나는지, 이메일 서버가 사용하는 프로토콜과 같은 복잡한 세부 사항은 사용자에게 숨겨져 있습니다. 따라서 이메일을 보내려면 내용을 입력하고 수신자의 주소를 언급한 다음 보내기를 클릭하기만 하면 됩니다.

마찬가지로 객체 지향 프로그래밍에서 추상화는 구현 세부 사항을 사용자에게 숨기는 프로세스이며 기능만 사용자에게 제공됩니다. 즉, 사용자는 개체가 수행하는 작업 대신 개체가 수행하는 작업에 대한 정보를 갖게 됩니다.

Java에서 추상화는 Abstract 클래스와 인터페이스를 사용하여 이루어집니다.

추상 클래스

추상을 포함하는 클래스 선언의 키워드는 추상 클래스로 알려져 있습니다.

예시

이 섹션에서는 추상 클래스의 예를 제공합니다. 추상 클래스를 만들려면 abstract를 사용하세요. 클래스 선언에서 class 키워드 앞의 키워드.

/* File name : Employee.java */
public abstract class Employee {
   private String name;
   private String address;
   private int number;

   public Employee(String name, String address, int number) {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   
   public double computePay() {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   
   public void mailCheck() {
      System.out.println("Mailing a check to " + this.name + " " + this.address);
   }

   public String toString() {
      return name + " " + address + " " + number;
   }

   public String getName() {
      return name;
   }
 
   public String getAddress() {
      return address;
   }
   
   public void setAddress(String newAddress) {
      address = newAddress;
   }
 
   public int getNumber() {
      return number;
   }
}

추상 메소드를 제외하고 Employee 클래스는 Java의 일반 클래스와 동일함을 알 수 있습니다. 클래스는 이제 추상적이지만 여전히 3개의 필드, 7개의 메서드 및 1개의 생성자가 있습니다.

이제 다음과 같은 방법으로 Employee 클래스를 인스턴스화할 수 있습니다.

/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      /* Following is not allowed and would raise error */
      Employee e = new Employee("George W.", "Houston, TX", 43);
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

위의 클래스를 컴파일하면 다음 오류가 발생합니다. -

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

추상 클래스 상속

다음과 같은 방법으로 구체 클래스처럼 Employee 클래스의 속성을 상속할 수 있습니다. -

예시

/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
   
   public Salary(String name, String address, int number, double salary) {
      super(name, address, number);
      setSalary(salary);
   }
   
   public void mailCheck() {
      System.out.println("Within mailCheck of Salary class ");
      System.out.println("Mailing check to " + getName() + " with salary " + salary);
   }
 
   public double getSalary() {
      return salary;
   }
   
   public void setSalary(double newSalary) {
      if(newSalary >= 0.0) {
         salary = newSalary;
      }
   }
   
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

여기서는 Employee 클래스를 인스턴스화할 수 없지만 Salary 클래스는 인스턴스화할 수 있으며 이 인스턴스를 사용하면 아래와 같이 Employee 클래스의 세 필드와 7개 메서드에 모두 액세스할 수 있습니다.

/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

이것은 다음 결과를 생성합니다 -

출력

Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class 
Mailing check to Mohd Mohtashim with salary 3600.0

 Call mailCheck using Employee reference--
Within mailCheck of Salary class 
Mailing check to John Adams with salary 2400.0

추상 방법

클래스에 특정 메소드가 포함되기를 원하지만 해당 메소드의 실제 구현이 하위 클래스에 의해 결정되기를 원하는 경우 상위 클래스의 메소드를 추상으로 선언할 수 있습니다.

다음은 추상 메소드의 예입니다.

예시

public abstract class Employee {
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   // Remainder of class definition
}

메소드를 추상으로 선언하면 두 가지 결과가 있습니다. -

참고 - 결국, 자손 클래스는 추상 메소드를 구현해야 합니다. 그렇지 않으면 인스턴스화할 수 없는 추상 클래스의 계층 구조를 갖게 됩니다.

Salary 클래스가 Employee 클래스를 상속한다고 가정하면 computePay()를 구현해야 합니다. 아래와 같은 방법 -

/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
  
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
   // Remainder of class definition
}

java

  1. 자바 최종 키워드
  2. 자바 instanceof 연산자
  3. 자바 추상 ​​클래스와 추상 메소드
  4. 자바 중첩 정적 클래스
  5. 자바 익명 클래스
  6. 자바 싱글톤 클래스
  7. 자바 리플렉션
  8. 자바 ObjectOutputStream 클래스
  9. 자바 제네릭
  10. 자바 파일 클래스