php中关于抽象(abstract)类和抽象方法的问题分析

 这篇文章主要介绍了php中关于抽象(abstract)类和抽象方法的问题分析,有需要的朋友可以参考一下

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

时间: 2024-12-21 22:26:52

php中关于抽象(abstract)类和抽象方法的问题分析的相关文章

C++中的纯虚函数(pure virtual) 和抽象基类(abstract base class)

纯虚函数(pure virtual), 是一个基类中的方法, 仅仅是声明, 而不包括定义, 是一个泛化概念(general concept); 是把相应的虚函数, 末尾添加"=0",该虚函数就变为纯虚函数, 可以不用添加定义; 如果是其他虚函数, 即使不使用, 也必须定义(define); 包含纯虚函数的基类, 是抽象基类(abstract base class),不能定义(define)对象(object), 仅可以作为继承使用; 代码: /* * CppPrimer.cpp * *

[C#]中abstract类和interface概念和区别讲解

  abstract(抽象)类和interface(接口)是面向对象编程中两个概念,但是学了很多年编程的程序员有时对这两个概念的区分仍然不是很清楚.下面就讲解abstract类和interface的概念和区别. abstract(抽象)类 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法. 抽象类不能被实例化. 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类. 具体派生类必须覆盖基类的抽象方法. 抽象派生类可以覆盖基类的抽象方法,也可以不

重写-C#中override和abstract能否同时修饰方法/类

问题描述 C#中override和abstract能否同时修饰方法/类 在网上查发现有人说能 有人说不能 好疑惑 求大神们解疑 我是认可 不能同时修饰的 解决方案 这么用没有任何意义,因为你override就是为了重写基类的方法.你又是abstract,也就是你不打算重写. 换一句话说,这是没有任何意义的.因为你的派生类继承你这个类,那么自然就得到了这个类基类的方法. 除非你希望定义一个重名的,但是和它基类没有关系的方法,同时它是abstract的,那么你不应该用override而应该用new.

java学习笔记7--抽象类与抽象方法

1.终结类与终结方法 被final修饰符修饰的类和方法,终结类不能被继承,终结方法不能被当前类的子类重写 终结类的特点:不能有派生类 终结类存在的理由: 安全: 黑客用来搅乱系统的一个手法是建立一个类的派生类,然后用他们的类代替原来的类 设计: 你认为你的类是最好的或从概念上你的类不应该有任何派生类 终结方法的特点:不能被派生类覆盖 终结方法存在的理由: 对于一些比较重要且不希望子类进行更改的方法,可以声明为终结方法.可防止子类对父类关键方法的错误重写,增加了代码的安全性和正确性 提高运行效率.

java-基础-Interface、abstract类、Static class 、non static class的区别

Interface与abstract类的区别. 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类.接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法.抽象类中的成员可以是private.默认.protected.public的,而接口中的成员全都是public的.抽象类中可以定义成员变量,而接口中

c#中的interface abstract与virtual

  interface用来声明接口1.只提供一些方法规约,不提供方法主体  如  public interface IPerson {  void getName();//不包含方法主体  }2.方法不能用public abstract等修饰,无字段变量,无构造函数.3.方法可包含参数  如    public interface IPerson  {   void getAge(string s);  }   一个例子(例1):  public interface IPerson  {   

python抽象基类用法实例分析

  本文实例讲述了python抽象基类用法.分享给大家供大家参考.具体如下: 定义抽象类,需要使用abc模块,该模块定义了一个元类(ABCMeata),和装饰器 @abstractmethod, @abstractproperty 如果要实例化继承了Foo 的子类,子类必须实现了Foo所有的抽象方法(跟java一样),否则实例化报错. 抽象类不能直接实例化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!coding=utf-8 from abc

详解iOS应用开发中使用设计模式中的抽象工厂模式_IOS

概述 我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了"开放-关闭原则":工厂方法模式克服了简单工厂模式的缺点,将产品的创建工作放到具体的工厂类,每个工厂类负责生成一个产品.但是在实际应用中,一个工厂类只创建单个产品的情况很少,一般一个工厂类会负责创建一系列相关的产品,如果我们要设计这样的系统,工厂方法模式显然不能满足应用的需求,本章要介绍的抽象工厂模式,可以很好地解决一系列产品创建的问题. 定义 "提供一个创建一系列相关或相互依赖对象的接口,而无需指定

asp.net中virtual和abstract的区别分析_实用技巧

本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考.具体分析如下: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法. 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生类实例的调用中,该虚方法使用的是派生重写的方