Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java — абстракция

Согласно словарю, абстракция это качество работы с идеями, а не с событиями. Например, когда вы рассматриваете случай с электронной почтой, сложные детали, такие как то, что происходит, как только вы отправляете электронное письмо, протокол, который использует ваш почтовый сервер, скрыты от пользователя. Поэтому, чтобы отправить электронное письмо, вам просто нужно ввести текст, указать адрес получателя и нажать кнопку «Отправить».

Аналогично в объектно-ориентированном программировании абстракция — это процесс сокрытия деталей реализации от пользователя, пользователю будет предоставлена ​​только функциональность. Другими словами, пользователь будет иметь информацию о том, что делает объект, а не о том, как он это делает.

В Java абстракция достигается с помощью абстрактных классов и интерфейсов.

Абстрактный класс

Класс, содержащий аннотацию ключевое слово в его объявлении называется абстрактным классом.

Пример

В этом разделе приведен пример абстрактного класса. Чтобы создать абстрактный класс, просто используйте abstract ключевое слово перед ключевым словом класса в объявлении класса.

/* 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. Класс стал абстрактным, но по-прежнему имеет три поля, семь методов и один конструктор.

Теперь вы можете попытаться создать экземпляр класса 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, как показано ниже.

/* 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. Окончательное ключевое слово Java
  2. Оператор экземпляра Java
  3. Абстрактный класс Java и абстрактные методы
  4. Вложенный статический класс Java
  5. Анонимный класс Java
  6. Одноэлементный класс Java
  7. Java-отражение
  8. Класс Java ObjectOutputStream
  9. Дженерики Java
  10. Класс файла Java