1、继承和重载

!!!php中使用extends单一继承的方法

被继承的类  父类(基类)

继承者   子类(派生类)

如果说我们需要将父类方法重载(方法覆盖),在派生类里使用与基类方法重名的方法名称执行重载

重载时我们需要调用原始基类内容,再增加新的内容,我们可以使用:

基类名::方法名称

<?php
class Root{
function dayin(){
return "Root print <br>";
}
}
class Son extends Root{
function dayin2(){
return $this->dayin()."Son print <br>";
}
} $p = new Son();
echo $P->dayin();
   echo $P->dayin2();
?>
<?php
class Root{
function dayin(){
return "Root print <br>";
}
}
class Son extends Root{
function dayin(){
return Root::dayin()."Son print <br>";
}
} $p = new Son();
echo $P->dayin();
?>

这样可以帮我们减少很多重新命名我们方法的名称,重载减少了我们命名的一些混乱,减轻了一些步骤。

2、抽象方法和抽象类

抽象关键字:abstract

抽象就是无法确切说明,但又有一定的概念或者名称

一个类中至少有一个方法是抽象的,我们称之为抽象类。

所以定义抽象类首先定义抽象方法

抽象方法不允许有{ }

抽象方法前面必须加abstract

其实就是抽象类是建立在抽象方法之上的

抽象类的几个特点:

  1、不能被实例化,只能被继承

  2、继承的派生类中要把所有抽象方法重载才能实例化

<?php
abstract class cl1{
abstract function func1();
abstract function func2();
abstract function func3();
function ok(){
echo 'okkkkk';
}
} class cl2 extends cl1{
function func1()
{
echo "第一个";
}
function func2()
{
echo "第二个";
}
function func3()
{
echo "第三个";
}
function ok()
{
cl1::ok();
}
}
$p = new cl2();
$p->func2();
$p->ok();

3、类中常用关键字

1、关键字:final

用于定义类和方法的重要关键字,当定义类的时候该类将不能被继承,当用来定义方法的时候该方法不能被重载

<?php

include ('conn.php');
class MyPc{
public $name='我的电脑';
final function power(){
echo $this->name.",电脑开中......";
}
}
class My extends MyPc{
function power()
{
echo MyPc::power().'%%%%%';
}
}
$p = new My();
$p->power(); 提示:Fatal error: Cannot override final method MyPc::power() in E:\phptest\datatype\663.php on line 14
<?php
include ('conn.php');
final class MyPc{
public $name='我的电脑';
final function power(){
echo $this->name.",电脑开中......";
}
}
class My extends MyPc{ }
$p = new My();
提示:Fatal error: Class My may not inherit from final class (MyPc) in E:\phptest\datatype\663.php on line 11

只能实例化基类

<?php
include ('conn.php');
final class MyPc{
public $name='我的电脑';
final function power(){
echo $this->name.",电脑开中......";
}
}
class My { }
$p = new MyPc();
$p->power();

2、关键字:self

用来类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要类实例化以后下可以使用,self可以直接访问当前类中的内部成员

self ::类内部成员  (属性或者方法)

等价于

类名::类内部成员  (属性或者方法)

注意:因为没有实例化类访问内部属性或者方法是没有意义的,所以self一般用来访问类中:静态成员,常量,或者其他定义内容

<?php
include ('conn.php');
final class MyPc{
static $name='我的电脑';
final function power(){
echo $this->name.",电脑开中......";
}
} $p = new MyPc();
$p->power();
提示:
<br />
<b>Strict Standards</b>: Accessing static property MyPc::$name as non static in <b>E:\phptest\datatype\663.php</b> on line <b>6</b><br />
<br />
<b>Notice</b>: Undefined property: MyPc::$name in <b>E:\phptest\datatype\663.php</b> on line <b>6</b><br />
,电脑开中......

应该是这样写

<?php
include ('conn.php');
final class MyPc{
static $name='我的电脑';
final function power(){
echo self::$name.",电脑开中......";
}
} $p = new MyPc();
$p->power();
输出结果:
我的电脑,电脑开中......
<?php
include ('conn.php');
final class MyPc{
static $name='我的电脑';
final function power(){
echo self::$name.",电脑开中......";
}
} //$p = new MyPc();
//$p->power(); echo MyPc::$name;

3、关键字:static

用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象时导致同样的方法或者属性重复占用。

4、关键字:const

用来定义类中的常量,类似PHP外部定义常量的关键字define();Const只能修饰类当中的成员属性

注意:

  1、建议大写常量

  2、常量不使用$符号

4、类中接口应用

1、接口的介绍与创建

关键字:interface

接口:一种成员属性全部为抽象或常量的特殊抽象类

接口当中不允许声明变量

2、接口的引用与规范

关键字:implements

先继承后接口,单继承多接口

<?php
include ('conn.php');
interface demo{
const NAME="名称";
function fun1();
function fun2();
}
interface demo2{
function fun3();
function fun4();
}
interface demo3{
const PLAY="播放";
function fun5();
}
class mypc implements demo,demo2 {
function fun1()
{
echo "+++++++++++++<br>";
}
function fun2()
{
echo "%%%%%%%%%%%%%%<br>";
}
function fun3()
{
// TODO: Implement fun3() method.
}
function fun4()
{
// TODO: Implement fun4() method.
}
}
//单继承多接口
class myps extends mypc implements demo3{
function fun5()
{
echo '5555';
}
} $p = new mypc();
$p->fun1();
echo mypc::NAME; $b = new myps();
$b->fun5();
echo myps::NAME;
echo myps::PLAY;

5、类中多态的应用

1、多态的优势

类型运算符instanceof 用来测定一个给定的对象是否来自指定的对象类。

<?php
include ('conn.php');
class A{}
class B{}
$thing = new A();
if($thing instanceof A){
echo 'A';
}
if($thing instanceof B){
echo 'B';
} interface myusb{
function type();
function alert();
}
class zip implements myusb{
function type()
{
echo '2.0';
}
function alert()
{
echo '正在检查U盘驱动';
}
} class mp3 implements myusb{
function type()
{
echo '1.0';
}
function alert()
{
echo '正在检查MP3驱动';
}
} class mypc{
function pcusb($what){
$what->type().'<br>';
$what->alert();
}
} $p = new mypc();
$zip = new zip();
$mp3= new mp3(); $p->pcusb($zip);
$p->pcusb($mp3);

总结

1、对象描述的配置

2、对象方法的异常处理

3、克隆对象的应用

4、自动载入对象的方法

<?php
include ('conn.php'); class My{
function __toString(){
echo '显示的内容';
}
}
$p = new My();
echo $p; class MY{
function __call($name, $arguments)
{
echo "错误的方法名".$name;
echo "错误的参数".print_r($arguments);
}
} class My{
function __clone()
{
// TODO: Implement __clone() method.
}
} $a = new My();
$b = clone $a; function __autoload($class_n){
include($class_n.".php");
}
$p = new Mypc();
$d=new demo();

php 抽象 继承 多态的更多相关文章

  1. Java基础笔记-抽象,继承,多态

    抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...

  2. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  3. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  4. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  5. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  6. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  7. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  8. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

  9. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

随机推荐

  1. 通过iscsi协议使用ceph rbd

    转自:http://blog.csdn.net/wytdahu/article/details/46545235 ceph很早就已经支持通过iscsi协议来使用rbd,这篇博文对此做下演示,并且使用O ...

  2. .net/c# RabbitMQ 连接断开处理-断线重连(转载)

    Rabbitmq 官方给的NET consumer示例代码如下,但使用过程,会遇到connection断开的问题,一旦断开,这个代码就会报错,就会导致消费者或者生产者挂掉. 下图是生产者发送消息,我手 ...

  3. PLSQL_统计信息系列07_数据字典统计信息的导出和导入

    2014-05-05 Created By BaoXinjian

  4. Android使用DrawerLayout仿qq6.6版本侧滑效果

      一讲到侧滑菜单,我相信大家都会想到一个开源控件SlidingMenu,在google还没有出来DrawerLayout的时候几乎都是使用Slidingmenu来实现侧滑效果,可以说是效果很不错,自 ...

  5. 如何发布打包并发布自己的Android应用(APP)

    如何将android项目打包成apk 分类: android 2012-08-29 10:12 1678人阅读 评论(1) 收藏 举报 androideclipseapplicationjdkjava ...

  6. Accelerated C++学习笔记7—&lt;使用库算法&gt;

    第6章  使用库算法 本章中主要教我们怎样使用几个库算法来解决与处理字符串和学生成绩相关的问题. 1.分析字符串 使用一个循环来连接两幅字符图案 <span style="font-f ...

  7. 《TCP/IP具体解释卷2:实现》笔记--选路请求和选路消息

    内核的各种协议并不直接使用前面提供的函数来訪问选路树,而是调用几个函数:rtalloc和rtallocl是完毕路由表查询的两个 函数:rtrequest函数用于加入和删除路由表项:另外大多数接口在接口 ...

  8. HTML - SELECT默认选中

    除了在option中定义属性selected = "selected",还可以 <select defaultValue='2'> <option value=& ...

  9. 使用 bat cmd命令杀掉 删掉运行的程序

    删掉所有xx.exe开启的进程 taskkill /f /im xx.exe 开启xx.exe start xx.exe 根据标题栏信息删除 taskkill /f /FI "windows ...

  10. [Jobdu] 题目1545:奇怪的连通图

    题目描述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1可以与节点n连通. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1 <= n <= 100 ...