La raison pour laquelle les classes abstraites et les interfaces sont regroupées est qu'elles sont difficiles à distinguer et indépendantes les unes des autres. Après avoir appris les trois caractéristiques majeures de la programmation Java (encapsulation, héritage et polymorphisme), mon plus grand gain est que j'ai lentement compris les avantages de la programmation orientée objet comme le langage Java, qui peut à la fois conserver sa propre indépendance et évoluer constamment et développement. Si l'encapsulation et l'héritage sont la base de la réalisation du polymorphisme Java, alors je pense personnellement que les classes et interfaces abstraites fournissent un très bon support pour le polymorphisme.
1. Classe abstraite
Formellement parlant, une classe modifiée avec abstract est une classe abstraite. Les classes abstraites sont incomplètes et ne peuvent être utilisées que comme classes de base et ne peuvent pas être instanciées (elles ne peuvent pas être nouvelles).
En termes simples, une classe abstraite ne fait rien par elle-même. Elle nécessite que d'autres implémentent ses spécifications. Il définit un ensemble de méthodes abstraites, et les expressions spécifiques de cet ensemble de méthodes abstraites peuvent être implémentées par des classes dérivées. L'implémentation de classes abstraites doit utiliser l'héritage, sinon cela n'aura aucun sens si vous le créez.
Vous devez faire attention aux points suivants lors de l'utilisation de classes abstraites :
1. Une classe abstraite n'est qu'une référence et ne peut pas être instanciée. Le travail d'instanciation doit être laissé à ses sous-classes ;
2. Les méthodes abstraites doivent être remplacées par des sous-classes
3. Dans une classe, tant qu'il existe une méthode définie comme méthode abstraite (modifiée par abstract), alors cette classe doit être remplacée. Défini comme une classe abstraite (le nom de la classe doit également être modifié par abstract) ;
4. La classe abstraite peut ou non contenir des méthodes spécifiques ; >5. La méthode abstraite de la sous-classe ne peut pas avoir le même nom que la méthode abstraite de la classe parent
1 public abstract class ChouX {2 public abstract void method1();3 4 public void method2() {5 6 }7 }
//抽象类public abstract class Animal {public abstract void shout(); }
1 //猫子类2 public class Cat extends Animal {3 public void shout() {4 System.out.println("喵~~");5 }6 }
//Dog子类public class Dog extends Animal {public void shout() { System.out.println("汪汪汪。。。"); } }
Sortie :
//测试类public class Test {public static void main(String[] args) { Animal a1 = new Dog(); Animal a2 = new Cat(); a1.shout(); a2.shout(); } }
Interface. En génie logiciel, l'interface fait généralement référence à des méthodes ou des fonctions appelées par d'autres.
Format :[public] interface InterfaceName{ }
<span style="color: #0000ff;"><span style="color: #99cc00;">//例子</span><br>interface</span><span style="color: #000000;"> Door{</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> open();</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> close(); }</span>
3. différence entre les classes abstraites et les interfaces
1. Différences au niveau de la syntaxeTout d'abord, les classes abstraites peuvent fournir des détails sur l'implémentation des méthodes membres, alors que seules les méthodes abstraites publiques peuvent exister dans interfaces;
Deuxièmement, les variables membres dans les classes abstraites peuvent être de différents types, tandis que les membres des interfaces ne peuvent être que de type public static final De plus, les interfaces ne peuvent pas contenir de blocs de code statiques et statiques ; méthodes, alors que les classes abstraites le peuvent ;Enfin, une classe ne peut hériter que d'une seule classe abstraite, mais peut hériter de plusieurs interfaces. 2. Différences au niveau du design Tout d'abord, une classe abstraite est une abstraction d'une chose, c'est-à-dire une abstraction d'une classe, tandis qu'une interface est une abstraction d'un comportement. . De plus, la classe abstraite est la classe parent de nombreuses sous-classes et il s'agit d'une conception de modèle. L'interface est une spécification comportementale. Enfin, dans une classe abstraite, si vous souhaitez modifier une méthode, vous pouvez l'implémenter directement dans la classe abstraite, et les sous-classes n'ont pas besoin d'apporter de modifications. Si cela arrive à une interface, toutes les classes liées à cette interface doivent être modifiées. Résumé : Cela dit, le principe est en fait assez simple une fois qu'on l'a compris. Pour les classes abstraites, par exemple, vous définissez une classe abstraite comme classe parent. Il est possible que vous n'ayez pas décrit complètement une classe ou qu'elle ait été mise à niveau quelques années plus tard. Il y a toujours des réserves. Pour le moment, vous n'avez pas besoin de faire la guerre pour renverser toute la classe parente. Il vous suffit d'apporter des modifications spécifiques à la sous-classe. C’est à vous de décider ce que vous voulez changer ou non, et quand le faire. Cela n'augmenterait-il pas la flexibilité et la réutilisabilité ? La différence entre les classes abstraites et les interfaces est la suivante : les poissons et les bateaux peuvent nager dans l'eau, ils ne sont donc pas la même classe. Ne pensez même pas à mettre les poissons et les bateaux dans la même classe, mais ils ont tous les deux cette action de "nager", nous avons donc défini cette action de "nager" dans une interface, afin que les poissons puissent l'utiliser et que les bateaux puissent l'utiliser. vous pourrez l'utiliser à l'avenir lorsque vous voudrez décrire tout ce qui peut « nager ».Il existe un cas très utile sur Internet :
Vous pouvez y réfléchir attentivement pour comprendre la différence entre les classes abstraites et les interfaces.
1 //接口2 interface Alram{3 void alarm();4 }
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!