静态、抽象类、接口

1.静态

普通成员:是属于对象的
静态成员:a.是属于类的;

b.定义时加上关键字 static ;

c.关键字 self:在类中代表该类;

d.调用静态成员符号双冒号::

普通方法是可以调用静态成员的; 静态方法不能调用普通成员

例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class Ren

{

    public $name;

    public static $zhongzu;    //将普通成员变量变为静态成员变量,加上关键字 static

    

    //普通方法

    function Say()

    {

        echo Ren::$zhongzu."你好";   

        //echo self::$zhongzu."你好";  //关键字 self:在类中代表该类: 类名修改,可以用这个关键字 

    }  

}

Ren::$zhongzu="战斗民族";   //调用静态成员使用双冒号::

$r new Ren();

$r->Say();   //普通方法可以调用静态方法

输出结果就是:战斗民族你好

2.抽象类

抽象类a.它不能被实例化, b.它作为父类使用,   c.关键字 abstract

例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

abstract class Dongwu   //使用关键字 abstract 可以成为抽象类

{

  public $name;

  public $age;

    

  function Run()

  {

    echo "跑";

  }

}

class Dog extends Dongwu   //继承父类

{      

}

$d new Dog();

$d->Run();

实例化子类继承父类就可以输出正确

注意:强行实例化抽象类,会出现错误

抽象类的扩展功能很强,可以不动源代码的基础上扩展出其他的类

例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

abstract class YunSuan   //抽象类的关键字  abstract

{

  public $a;

  public $b;

    

  function Suan()

  {

            

  }

}

//Jia继承YunSuan并且修改Suan方法

class Jia extends YunSuan

{

  function Suan()

  {

    return $this->a+$this->b;

  }

}

//Cheng继承YunSuan并且修改Suan方法

class Cheng extends YunSuan

{

  function Suan()

  {   

  return $this->a*$this->b;

  }

}

$J new Jia();

$J->a=2;

$J->b=10;

echo $J->Suan();

  

3.接口

接口:a.极度抽象的类

b.定义方式 :interface

c.接口中的方法是控制子类必须实现某些功能(接口中出现的方法,子类必须实现)

d.实现接口 关键字:implements

例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

interface IUSB    //I开头,I就是定义方式的开头

{

  function Read();    //成员方法:没有函数体,只声明函数名  

  function Write();

}

class ShuBiao implements IUSB    //实现接口 关键字:implements

{

  function Read()

  {

    echo "鼠标插上";   

  }

    

  function Write()

  {

    echo "chuanshu";   

  }

}

$snew ShuBiao();

$s->Read();

输出结果就是:鼠标插上

注意:如果子类中没有把父类的方法全部实现,那么输出时会报错;如果子类把父类的方法全部实现了,那么就会输出正确的调用方法答案

时间: 2024-10-06 03:07:43

静态、抽象类、接口的相关文章

19 抽象类 接口类 封装. 多态

主要内容: 1.  抽象类(接口类): 制定一个规范  : from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self):pass class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' % self.mon

静态,final,接口

一:static   static: 静态的.   1. 若需要一个类的多个对象共享一个变量,则该变量需要使用 static 修饰.   2. 因为 static 修饰的变量为类的所有的实例所共享,所以 static 成员不属于某个类的实例, 而属于整个类.      所以在访问权限允许的情况下,可以使用 "类名." 直接访问静态成员(成员包括属性和方法).   3. 注意: 在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员.      这

小知识(五):抽象类&接口

抽象类abstract: 抽象类和抽象方法可以用abstract关键字进行标识.就是没有完全定义的类或方法.所以不能直接实例化操作. 就因为他没完全定义所以不能用sealed关键字进行密封. 抽象方法不含程序主体: public abstract class Student { //抽象方法,不含程序体 public abstract void GetStudentID(); //子类可访问字段 prodected int i; //定义i的属性 public int I { get { ret

普通类 抽象类 接口

首先得搞懂什么是抽象类:一.概念:    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.    比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆.三角形这样一些具体概念.它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念.正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 下一章 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

Java实训笔记(二)——-抽象类-接口-泛型-集合

1.1方法的可变参数从JDK1.5之后,定义方法时参数的个数可以变化语法:最后一个数据类型后增加3个点注意:1.可变参数只能处于参数列表的最后:2.一个方法中最多只能包含一个可变参数:3.可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传人多个参数,也可以传入一个数组.1.2装箱与拆箱基本数据类型与对应的封装类之间能够自动进行转换,其本质是Java的自动装箱与拆箱过程.-装箱是指将基本类型数据值转换成对应的封装类对象,即将栈中的数据封装成对象存放到堆中的过程.-拆箱是装箱的

抽象类/接口

回顾:1.重写(override): 1)父子类中,方法签名相同,方法体不同 2)重写方法被调用时,看对象的类型 3)两同两小一大: 3.1)方法名同,参数列表同 3.2)子类返回值类型小于等于父类 3.2.1)void时,必须相同 3.2.2)基本类型时,必须相同 3.2.3)引用类型时,子类小于等于父类(父类大,子类小) 子类抛出的异常小于等于父类-----后期说 3.3)子类的访问权限大于或等于父类2.重写与重载的区别 1)重写(override):父子类,方法名同,参数列表同 “运行期”

0607am抽象类&接口&析构方法&tostring&小知识点

/*class ren{ public static $color;//静态 static function () { ren::$color; self::$color;//self只能写在类里面,代表这分类 }} */ //不能实例化的类:抽象类abstract class Animal //关键字abstract{ public $dong; public $jiao; function chi() { } function shui() { }}class Ren extends Ani