深入解读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();
?>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Golang には抽象クラスがありません。 Golang はオブジェクト指向 (OOP) 言語ではありません。クラス、継承、抽象クラスの概念はありません。ただし、golang には構造体 (struct) とインターフェース (インターフェース) があり、これらを組み合わせることによって間接的に実装できます。構造体とインターフェイス オブジェクト言語の抽象クラス。

エラーの原因は Python にあり、Tornado で NotImplementedError() がスローされるのは、抽象メソッドまたはインターフェイスが実装されていないことが原因である可能性があります。これらのメソッドまたはインターフェイスは親クラスで宣言されますが、子クラスでは実装されません。サブクラスが適切に動作するには、これらのメソッドまたはインターフェイスを実装する必要があります。この問題を解決するには、親クラスで宣言した抽象メソッドやインターフェイスを子クラスに実装します。別のクラスから継承するクラスを使用していてこのエラーが発生した場合は、親クラスで宣言されたすべての抽象メソッドを子クラスに実装する必要があります。インターフェイスを使用していてこのエラーが発生した場合は、インターフェイスで宣言されているすべてのメソッドを、インターフェイスを実装するクラスに実装する必要があります。どちらかわからない場合は、

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

インターフェイス インターフェイスは、Java の抽象メソッドと定数を定義します。インターフェイス内のメソッドは実装されていませんが、インターフェイスを実装するクラスによって提供されます。このインターフェイスは、実装クラスが指定されたメソッド実装を提供することを要求するコントラクトを定義します。インターフェイスを宣言します。 publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 抽象クラス 抽象クラスは、インスタンス化できないクラスです。これには、抽象メソッドと非抽象メソッドが混在しています。インターフェイスと同様に、抽象クラスの抽象メソッドはサブクラスによって実装されます。ただし、抽象クラスには、デフォルトの実装を提供する具象メソッドを含めることもできます。抽象クラスを宣言: publicabstractcl

インターフェイス: 実装のないコントラクト インターフェイスは、Java でメソッド シグネチャのセットを定義しますが、具体的な実装は提供しません。これは、インターフェイスを実装するクラスに、その指定されたメソッドを強制的に実装するコントラクトとして機能します。インターフェイス内のメソッドは抽象メソッドであり、メソッド本体はありません。コード例: publicinterfaceAnimal{voideat();voidsleep();} 抽象クラス: 部分的に実装されたブループリント 抽象クラスは、そのサブクラスによって継承できる部分的な実装を提供する親クラスです。インターフェイスとは異なり、抽象クラスには具体的な実装と抽象メソッドを含めることができます。抽象メソッドは、abstract キーワードを使用して宣言され、サブクラスによってオーバーライドされる必要があります。コード例: publicabstractcla

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

Java のインターフェイスと抽象クラスのパフォーマンスを最適化するためのヒント: インターフェイスでのデフォルト メソッドの使用を避け、必要な場合にのみ使用します。インターフェイス定義を最小限にして、必要なコンテンツのみを含めます。できるだけ多くの抽象クラス メソッドを実装します。サブクラスによるオーバーライドを防ぐには、final 修飾子を使用します。呼び出すべきではないメソッドをプライベートとして宣言します。

関数型インターフェイスと抽象クラスはどちらもコードの再利用を可能にするために使用されますが、関数型インターフェイスは参照関数を使用し、抽象クラスは継承を使用するなど、さまざまな方法で実装されます。関数型インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。関数型インターフェイスは宣言されたメソッドをすべて実装する必要がありますが、抽象クラスは一部のメソッドのみを実装できます。
