Heim  >  Artikel  >  Java  >  Definition der abstrakten Java-Klasse und Beispielcode-Sharing abstrakter Methoden

Definition der abstrakten Java-Klasse und Beispielcode-Sharing abstrakter Methoden

黄舟
黄舟Original
2017-04-15 09:08:102381Durchsuche

Dieser Artikel stellt hauptsächlich die relevanten Informationen über den Unterschied zwischen Java abstrakter Klasse und Schnittstelle vor. Freunde, die es benötigen, können darauf verweisen...

in Im objektorientierten Konzept werden alle Objekte durch Klassen beschrieben, aber umgekehrt werden nicht alle Klassen zur Beschreibung von Objekten verwendet. Wenn eine Klasse nicht genügend Informationen enthält, um ein konkretes Objekt zu beschreiben, wird eine solche Klasse verwendet ist eine abstrakte Klasse.

Abgesehen davon, dass abstrakte Klassen keine Objekte instanziieren können, können die

anderen -Funktionen der Klasse weiterhin auf die gleiche Weise wie auf normale Klassen zugegriffen werden.

Da abstrakte Klassen keine Objekte instanziieren können, müssen abstrakte Klassen geerbt werden, bevor sie verwendet werden können. Aus diesem Grund wird normalerweise während der Entwurfsphase entschieden, ob eine abstrakte Klasse entworfen werden soll.


Die übergeordnete Klasse enthält allgemeine Methoden der Unterklassensammlung. Da die übergeordnete Klasse selbst jedoch abstrakt ist, können diese Methoden nicht verwendet werden.


Abstrakte Klasse

Verwenden Sie die abstrakte

Klasse in der Java-Sprache, um abstrakte Klassen zu definieren. Das folgende Beispiel:


/* 文件名 : 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;
  }
}
Beachten Sie, dass die Employee-Klasse nicht anders ist. Obwohl es sich bei der Klasse um eine abstrakte Klasse handelt, verfügt sie immer noch über 3 Mitgliedsvariablen, 7 Mitgliedsmethoden und 1 Konstruktormethode. Wenn Sie nun das folgende Beispiel ausprobieren:

/* 文件名 : 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, die AbstractDemo-Klasse zu kompilieren, erhalten Sie die folgende Fehlermeldung:

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

Inheriting abstract class

Wir können die Employee-Klasse auf die übliche Weise erben:

/* 文件名 : 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;
  }
}
Obwohl wir kein Employee-Klassenobjekt instanziieren können, wird das Objekt dies tun, wenn wir ein Salary-Klassenobjekt instanziieren Erben Sie 3 Mitgliedsvariablen und 7 Mitgliedsmethoden von der Employee-Klasse.

/* 文件名 : 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();
  }
}
Die Ergebnisse des Kompilierens und Ausführens des obigen Programms 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 entwerfen möchten In einer solchen Klasse enthält die Klasse eine spezielle Mitgliedsmethode, deren spezifische Implementierung durch ihre Unterklasse bestimmt wird. Anschließend können Sie die Methode als abstrakte Methode in der übergeordneten Klasse deklarieren.

Das Schlüsselwort Abstract kann auch verwendet werden, um abstrakte Methoden zu deklarieren, die nur einen Methodennamen und keinen Methodenkörper enthalten.

Die abstrakte Methode ist nicht definiert und auf den Methodennamen folgt direkt ein Semikolon anstelle von geschweiften Klammern.

public abstract class Employee
{
  private String name;
  private String address;
  private int number;
   public abstract double computePay();  
  //其余代码
}
Das Deklarieren einer abstrakten Methode führt zu den folgenden zwei Ergebnissen:


Wenn eine Klasse eine abstrakte Methode enthält, muss die Klasse eine abstrakte Klasse sein.


Jede Unterklasse muss die abstrakte Methode der übergeordneten Klasse überschreiben oder sich selbst als abstrakte Klasse deklarieren.


Unterklassen, die eine abstrakte Methode erben, müssen diese Methode

überladen. Andernfalls muss die Unterklasse ebenfalls als abstrakt deklariert werden. Letztendlich muss eine Unterklasse die abstrakte Methode implementieren, andernfalls können weder die anfängliche Elternklasse noch die letzte Unterklasse zum Instanziieren des Objekts verwendet werden.

Wenn die Klasse „Salary“ die Klasse „Employee“ erbt, muss sie die Methode „computePay()“ implementieren:

Das obige ist der detaillierte Inhalt vonDefinition der abstrakten Java-Klasse und Beispielcode-Sharing abstrakter Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn