Latest web development tutorials

Java classes abstraites

Dans le concept orienté objet, tous les objets sont décrits par type, mais à l'inverse, toutes les classes sont utilisées pour décrire l'objet, l'objet si une classe ne contient pas suffisamment d'informations pour décrire un particulier une telle classe est une classe abstraite.

En plus de la classe abstraite ne peut pas être instancié objets, les autres classes fonctionnelles existent encore, la manière d'accéder aux membres variables, les méthodes et les constructeurs des membres et de la même catégorie générale.

Étant donné que la classe abstraite ne peut pas être instancié objet, de sorte que la classe abstraite doit être héritée, il peut être utilisé. Pour cette raison aussi, généralement déterminée au stade de la conception ou de ne pas concevoir une classe abstraite.

classe Parent contient un ensemble de sous-classe commune, mais en raison de la classe parent lui-même est abstraite, vous ne pouvez pas utiliser ces méthodes.


classe abstraite

Permet de définir la classe abstraite classe abstraite dans le langage Java. Les exemples qui suivent:

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

Notant que la classe des employés est pas différent, bien que la classe est une classe abstraite, mais il a encore trois variables membres, les méthodes et sept membres d'un constructeur. Maintenant, si vous essayez l'exemple suivant:

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

Lorsque vous essayez de compiler la classe AbstractDemo, il va produire l'erreur suivante:

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

l'héritage de classe Résumé

Notre approche générale héritée par la classe des employés:

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

Bien que nous ne pouvons pas instancier un objet de classe Employé, mais si on instancie un objet de classe de salaire qui hérite des variables de classe des employés et trois membres des sept membres de la méthode.

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

Le programme ci-dessus est compilé les résultats sont les suivants:

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.

Résumé méthode

Si vous souhaitez concevoir une classe qui contient une méthode de membre spécifique, la mise en œuvre spécifique de la méthode est déterminée par ses sous-classes, alors vous pouvez déclarer la méthode dans la classe parente est une méthode abstraite.

De même Abstract mot-clé peut être utilisé pour déclarer des méthodes abstraites, des méthodes abstraites ne contiennent qu'un nom de méthode, et aucun corps de la méthode.

Résumé méthode est pas définie, directement derrière le nom de la méthode avec un point-virgule au lieu d'accolades.

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

Déclarez méthodes abstraites se traduira par les deux résultats suivants:

  • Si une classe contient des méthodes abstraites, la classe doit être abstraite.
  • Toute sous-classe doit redéfinir les méthodes abstraites de la classe parente, ou se déclarer abstraite.

Héritée abstraites méthodes sous-classes doivent remplacer cette méthode. Dans le cas contraire, la sous-classe doit être déclarée comme une classe abstraite. En fin de compte, il doit y avoir des sous-classes pour mettre en œuvre la méthode abstraite, sinon, de la première à la dernière sous-classe de la classe parent ne peut pas être utilisé pour instancier l'objet.

Si la classe salariale hérite de la classe d'employés, il doit mettre en œuvre la méthode computePay ():

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

   //其余代码
}