Latest web development tutorials

Java abstrakte Klassen

In der objektorientierten Konzept werden alle Objekte nach Typ beschrieben, aber umgekehrt sind nicht alle Klassen verwendet, um das Objekt zu beschreiben, das Objekt, wenn eine Klasse enthält nicht genügend Informationen für eine bestimmte zu beschreiben eine solche Klasse ist eine abstrakte Klasse.

Zusätzlich zu der abstrakten Klasse können keine Objekte instanziiert werden, die anderen Funktionsklassen noch vorhanden sind, die Art und Weise die Elementvariablen, Methoden und Konstrukteure der Mitglieder und die gleiche allgemeine Kategorie zuzugreifen.

Da die abstrakte Klasse kann nicht Objekt instanziert werden, so dass die abstrakte Klasse vererbt werden muss, kann es verwendet werden. Aus diesem Grund ist auch, in der Regel in der Entwurfsphase bestimmt oder nicht eine abstrakte Klasse zu entwerfen.

Übergeordnete Klasse enthält eine Reihe von gemeinsamen Unterklasse, aber aufgrund der übergeordneten Klasse selbst abstrakt ist, kann man nicht diese Methoden verwenden.


Abstrakte Klasse

Verwenden Sie zu abstrakten Klasse abstrakte Klasse in der Java-Sprache definieren. Die folgenden Beispiele:

/* 文件名 : 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;
   }
}

Anbetracht dessen, dass die Klasse Employee ist nicht anders, obwohl die Klasse eine abstrakte Klasse ist, aber es hat noch drei Elementvariablen, Methoden und sieben Mitglieder einer Konstruktor. Nun, wenn Sie versuchen, das folgende Beispiel:

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      /* 以下是不允许的,会引发错误 */
      Employee e = new Employee("George W.", "Houston, TX", 43);

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

Wenn Sie versuchen, AbstractDemo Klasse zu kompilieren, wird es den folgenden Fehler erzeugen:

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

Abstrakte Klassenvererbung

Unser allgemeines Konzept der Employee-Klasse geerbt:

/* 文件名 : 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;
   }
}

Wir können zwar nicht ein Objekt der Klasse Mitarbeiter, instanziiert aber wenn wir eine Gehaltsklasse Objekt instanziiert, die aus den Mitarbeiterklassenvariablen und drei Mitglieder der sieben Mitglieder des Verfahrens erbt.

/* 文件名 : 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();
    }
}

Das obige Programm kompiliert Ergebnisse sind wie folgt:

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.

Abstrakte Methode

Wenn Sie eine Klasse entwerfen möchten, die ein bestimmtes Element-Methode enthält, wird die spezifische Implementierung des Verfahrens durch ihre Unterklassen bestimmt, dann können Sie die Methode in der übergeordneten Klasse deklarieren eine abstrakte Methode ist.

Ähnlich Zusammenfassung Schlüsselwort verwendet werden können abstrakte Methoden zu erklären, enthalten abstrakte Methoden nur einen Methodennamen und keine Methode, Körper.

Abstrakte Methode nicht definiert ist, direkt hinter dem Methodennamen mit einem Semikolon anstelle von geschweiften Klammern.

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

Deklarieren abstrakte Methoden werden in den folgenden zwei Ergebnissen führen:

  • Wenn eine Klasse abstrakte Methoden enthält, muss die Klasse abstrakt sein.
  • Jede Unterklasse muss abstrakte Methoden der Elternklasse überschreiben, oder erklären sich abstrakt.

Geerbte abstrakte Methoden Unterklassen müssen diese Methode überschreiben. Andernfalls muss die Unterklasse als abstrakte Klasse deklariert werden. Letztlich muß es Unterklassen, die abstrakte Methode zu implementieren, andernfalls von der ersten zu der letzten Unterklasse Elternklasse kann nicht verwendet werden, um das Objekt zu instanzieren.

Wenn der Gehalt Klasse der Employee-Klasse erbt, muss es computePay () Methode implementieren:

/* 文件名 : 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;
   }

   //其余代码
}