Cet article présente principalement les informations pertinentes sur la différence entre la classe abstraite java et l'interface Les amis qui en ont besoin peuvent s'y référer...
dans. Dans le concept orienté objet , tous les objets sont décrits par des classes, mais à l'inverse, toutes les classes ne sont pas utilisées pour décrire des objets. Si une classe ne contient pas suffisamment d'informations pour décrire un objet concret, une telle classe. est une classe abstraite.
Sauf que les classes abstraites ne peuvent pas instancier des objets, les autres fonctions de la classe existent toujours. Les variables membres, les méthodes membres et les constructeurs sont accessibles de la même manière que les classes ordinaires.
Étant donné que les classes abstraites ne peuvent pas instancier des objets, les classes abstraites doivent être héritées avant de pouvoir être utilisées. Pour cette raison, il est généralement décidé lors de la phase de conception de concevoir ou non une classe abstraite.
La classe parent contient des méthodes communes de la collection de sous-classes, mais comme la classe parent elle-même est abstraite, ces méthodes ne peuvent pas être utilisées.
Classe abstraite
Utilisez une classe abstraite en langage Java pour définir des classes abstraites. L'exemple suivant :
/* 文件名 : 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; } }
Notez que la classe Employee n'est pas différente. Bien que la classe soit une classe abstraite, elle a toujours 3 variables membres, 7. méthodes membres et 1 méthode 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, vous obtiendrez l'erreur suivante :
Employee.java:46: Employee is abstract; cannot be instantiated Employee e = new Employee("George W.", "Houston, TX", 43); ^ 1 error
Héritage de la classe abstraite
Nous pouvons hériter de la classe Employee de la manière habituelle :
/* 文件名 : 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 puissions pas instancier un objet de classe Employee, si nous instancions un objet de classe Salary, l'objet sera Héritez de 3 variables membres et de 7 méthodes membres de la classe Employee.
/* 文件名 : 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(); } }
Les résultats de la compilation et de l'exécution du programme ci-dessus 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.
Méthode abstraite
Si vous souhaitez concevoir une telle classe, la classe contient Une méthode membre spéciale, dont l'implémentation spécifique est déterminée par sa sous-classe, vous pouvez alors déclarer la méthode comme méthode abstraite dans la classe parent.
Le mot-clé Abstract peut également être utilisé pour déclarer des méthodes abstraites. Les méthodes abstraites ne contiennent qu'un nom de méthode et aucun corps de méthode.
La méthode abstraite n'est pas définie et le nom de la méthode est suivi directement d'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éclarer une méthode abstraite entraînera les deux résultats suivants :
Si une classe contient une méthode abstraite, alors la classe doit être une classe abstraite.
Toute sous-classe doit remplacer la méthode abstraite de la classe parent, ou se déclarer comme classe abstraite.
Une sous-classe qui hérite d'une méthode abstraite doit surcharger cette méthode. Sinon, la sous-classe doit également être déclarée abstraite. Finalement, une sous-classe doit implémenter la méthode abstraite, sinon ni la classe parent initiale ni la sous-classe finale ne peuvent être utilisées pour instancier l'objet.
Si la classe Salary hérite de la classe Employee, alors elle doit implémenter la méthode calculatePay() :
/* 文件名 : 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; } //其余代码 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!