深入解读php中关于抽象(abstract)类和抽象方法的问题分析_PHP
在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口。而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点。
什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰。
1、抽象关键字 :abstract
抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字。
2、抽象方法和抽象类的定义
一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。
复制代码 代码如下:
abstract class class1{
abstract function fun1();
……
}
1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract
3、抽象类和方法使用规则
抽象类的几个特点:
1、不能被实例化,只能被继承
2、继承的派生类当中要把所有抽象方法重载才能实例化
关于抽象方法的声明如下:
复制代码 代码如下:
abstract function fun1();
?>
什么是抽象类呢?只要一个类里面有一个方法是抽象方法,那么这个类就必须定义为抽象类。抽象类也要使用关键字"abstract"来修饰,抽象类不能实例化对象,所以抽象方法作为子类方法重载的模板使用的,且要把继承的抽象类里的方法都实现。
关于抽象类以及抽象类的实现举例如下:
复制代码 代码如下:
abstract class User{ //定义抽象类
abstract protected function getUser(); //定义抽象方法
public function print_content(){
print $this->getUser();
}
}
class vipUser extends User{
protected function getUser(){
return "抽象类与抽象方法www.bitsCN.com";
}
}
$user=new vipUser(); //实例化子类
$user->print_content(); //抽象类与抽象方法
?>
注意:抽象类继承另外一个抽象类时(目的是对该抽象类的扩展),不能重写父类的抽象方法。
在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。
复制代码 代码如下:
abstract class User{
protected static $sal=0;
static abstract function getSal();
static abstract function setSal($sal);
}
class VipUser extends User{
static function getSal(){
return self::$sal;
}
static function setSal($sal){
self::$sal=$sal;
}
}
VipUser::setSal(100);
echo "you sal is www.bitsCN.com " . VipUser::getSal();
?>

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Golang n'a pas de classes abstraites. Golang n'est pas un langage orienté objet (POO). Il n'a pas de concepts de classes, d'héritage et de classes abstraites. Cependant, il existe des structures (structures) et des interfaces (interfaces) qui peuvent être indirectement implémentées via la combinaison de. struct et interface. Classes abstraites dans les langages objets.

La raison de l'erreur est en python. La raison pour laquelle NotImplementedError() est lancée dans Tornado peut être due au fait qu'une méthode ou une interface abstraite n'est pas implémentée. Ces méthodes ou interfaces sont déclarées dans la classe parent mais non implémentées dans la classe enfant. Les sous-classes doivent implémenter ces méthodes ou interfaces pour fonctionner correctement. Comment résoudre ce problème consiste à implémenter la méthode abstraite ou l'interface déclarée par la classe parent dans la classe enfant. Si vous utilisez une classe pour hériter d'une autre classe et que vous voyez cette erreur, vous devez implémenter toutes les méthodes abstraites déclarées dans la classe parent dans la classe enfant. Si vous utilisez une interface et que vous voyez cette erreur, vous devez implémenter toutes les méthodes déclarées dans l'interface dans la classe qui implémente l'interface. Si vous n'êtes pas sûr de savoir lequel

Java permet de définir des classes internes au sein d'interfaces et de classes abstraites, offrant ainsi une flexibilité pour la réutilisation et la modularisation du code. Les classes internes des interfaces peuvent implémenter des fonctions spécifiques, tandis que les classes internes des classes abstraites peuvent définir des fonctions générales et les sous-classes fournissent des implémentations concrètes.

Interface L'interface définit des méthodes abstraites et des constantes en Java. Les méthodes de l'interface ne sont pas implémentées, mais sont fournies par la classe qui implémente l'interface. L'interface définit un contrat qui exige que la classe d'implémentation fournisse des implémentations de méthodes spécifiées. Déclarez l'interface : publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} Classe abstraite Une classe abstraite est une classe qui ne peut pas être instanciée. Il contient un mélange de méthodes abstraites et non abstraites. Semblables aux interfaces, les méthodes abstraites des classes abstraites sont implémentées par des sous-classes. Cependant, les classes abstraites peuvent également contenir des méthodes concrètes, qui fournissent des implémentations par défaut. Déclarer la classe abstraite : publicabstractcl

Les interfaces et les classes abstraites sont utilisées dans les modèles de conception pour le découplage et l'extensibilité. Les interfaces définissent les signatures des méthodes, les classes abstraites fournissent une implémentation partielle et les sous-classes doivent implémenter des méthodes non implémentées. Dans le modèle de stratégie, l'interface est utilisée pour définir l'algorithme, et la classe abstraite ou la classe concrète assure l'implémentation, permettant une commutation dynamique des algorithmes. Dans le modèle d'observateur, les interfaces sont utilisées pour définir le comportement de l'observateur, et les classes abstraites ou concrètes sont utilisées pour s'abonner et publier des notifications. Dans le modèle d'adaptateur, les interfaces sont utilisées pour adapter les classes existantes ou les classes concrètes peuvent implémenter des interfaces compatibles, permettant une interaction avec le code d'origine.

Interface : une interface de contrat sans implémentation définit un ensemble de signatures de méthodes en Java mais ne fournit aucune implémentation concrète. Il agit comme un contrat qui oblige les classes qui implémentent l'interface à implémenter ses méthodes spécifiées. Les méthodes de l'interface sont des méthodes abstraites et n'ont pas de corps de méthode. Exemple de code : publicinterfaceAnimal{voideat();voidsleep();} Classe abstraite : plan partiellement implémenté Une classe abstraite est une classe parent qui fournit une implémentation partielle dont ses sous-classes peuvent hériter. Contrairement aux interfaces, les classes abstraites peuvent contenir des implémentations concrètes et des méthodes abstraites. Les méthodes abstraites sont déclarées avec le mot-clé abstract et doivent être remplacées par des sous-classes. Exemple de code : publicabstractcla

Les interfaces fonctionnelles et les classes abstraites sont utilisées pour la réutilisabilité du code, mais elles sont implémentées de différentes manières : interfaces fonctionnelles via des fonctions de référence, classes abstraites via l'héritage. Les interfaces fonctionnelles ne peuvent pas être instanciées, mais les classes abstraites le peuvent. Les interfaces fonctionnelles doivent implémenter toutes les méthodes déclarées, tandis que les classes abstraites ne peuvent implémenter que certaines méthodes.

Conseils pour optimiser les performances des interfaces et des classes abstraites en Java : Évitez d'utiliser les méthodes par défaut dans les interfaces et utilisez-les uniquement lorsque cela est nécessaire. Réduisez la définition de l’interface pour inclure uniquement le contenu nécessaire. Implémentez autant de méthodes de classe abstraites que possible. Utilisez le modificateur final pour éviter le remplacement par des sous-classes. Déclarez les méthodes qui ne doivent pas être appelées comme privées.
