工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java-抽象化

辞書によると、抽象化 イベントではなくアイデアを扱う品質です。たとえば、電子メールの場合、電子メールを送信するとすぐに何が起こるか、電子メール サーバーが使用するプロトコルなどの複雑な詳細は、ユーザーから隠されています。したがって、電子メールを送信するには、内容を入力し、受信者のアドレスを指定して、[送信] をクリックするだけです。

同様に、オブジェクト指向プログラミングでは、抽象化は実装の詳細をユーザーから隠すプロセスであり、機能のみがユーザーに提供されます。つまり、ユーザーは、オブジェクトがどのように動作するかではなく、何を行うかについての情報を得ることができます。

Java では、Abstract クラスとインターフェースを使用して抽象化を実現します。

抽象クラス

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 クラスの 3 つのフィールドと 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
}

メソッドを抽象として宣言すると、2 つの結果が生じます −

注意 - 最終的に、子孫クラスは抽象メソッドを実装する必要があります。そうしないと、インスタンス化できない抽象クラスの階層ができてしまいます。

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 ファイル クラス
  11. Java のインターフェイスと抽象クラス:違いは何ですか?