Maison  >  Article  >  Java  >  Bases de Java - classes abstraites et interfaces

Bases de Java - classes abstraites et interfaces

巴扎黑
巴扎黑original
2017-06-26 11:31:071331parcourir

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

6 Abstract ne peut pas modifier la même méthode en parallèle avec private, static, fanal ou native.
1 public abstract class ChouX {2     public abstract void method1();3 4     public void method2() {5 6     }7 }
Exemple de code :

//抽象类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();
    }
}

2. Interface

Pour la programmation orientée objet, l'abstraction est son A majeur. fonctionnalité. En Java, l'abstraction POO peut se refléter sous deux formes : les classes abstraites et les interfaces.

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{

}
Pour qu'une classe suive un ensemble spécifique d'interfaces, vous devez utiliser le mot-clé Implements .
Format :
<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>
class ClassName implémente Interface1, Interface2, Interface3....{} (permet à une classe de suivre plusieurs interfaces spécifiques)

3. différence entre les classes abstraites et les interfaces

1. Différences au niveau de la syntaxe

Tout 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn