[抽象类与抽象方法]
 1、什么是抽象方法?
 没有方法体{}的方法,必须使用abstract关键字修饰,这样的方法,我们称之为抽象方法。
 abstract function say()
 2、什么是抽象类?
 包含抽象方法的类就是抽象类,抽象类必须使用abstract关键字修饰
 abstract class Person{}
 3、抽象类的注意事项
 ①抽象类可以包含非抽象方法
 ②包含抽象方法的类,一定是抽象类
 抽象类 并不一定包含抽象方法
 ③抽象类,不能实例化
 (抽象类中可能包含抽象方法,抽象方法没有方法体,实例化调用没有意义)
 我们使用抽象类的目的就是限制实例化
 4、子类继承抽象类,那么子类必须重写父类的所有抽象方法,除非,子类也是抽象类
 5、使用抽象类的作用?
 ① 限制实例化。(抽象类是一个不完整的类,里面的抽象方法没有方法体,所以不能实例化)
 ② 抽象类为子类的继承提供一种规范,子类继承一个抽象类,则必须包含并且实现抽象类中已定的抽象方法

 abstract class Person{
abstract function say(); function say1(){} }
abstract class Chinese extends Person{ }

[接口]
 1、什么是接口?
 接口是一种规范,提供了一组实现接口的类所必须实现的方法组合
 接口的使用interface关键字声明
  interface Inter{}
  2、接口中的所有方法必须都是抽象方法
     接口中的抽象方法不需要也不能使用abstract修饰
  3、接口中不能声明变量,不能有属性,只能使用常量
  4、接口可以继承接口,使用extends关键字
  接口使用extends继承接口,也不能实现多继承
  interface Int1 extends Inter{}
  5、类可以实现接口,使用implements关键字
  类使用implements实现接口,可同时实现多个接口,多个接口用逗号分隔
  abstract class Person implements Inter,Inter2{}
  一个类实现一个或多个接口,那么这个类型必须实现所有接口中的所有抽象方法,除非,这个类是抽象类
  [接口与抽象类的区别]
  1、声明方式上,接口用interface关键字,抽象类使用abstract class
  2、实现\继承方式上,一个类使用extends继承抽象类,使用implements实现接口
  3、抽象类只能单继承,接口可以多实现(接口extends接口),多实现(类implements接口)
  4、抽象类中可以有非抽象方法,接口中只能有抽象方法,不能有非抽象方法
  抽象类中的抽象方法必须使用abstract关键字修饰,接口中抽象方法不能带修饰词
  5、抽象类是个类,可以有属性,变量。接口中只能有常量。

interface  Inter{
const NUM = ; function say();
} interface Int1 extends Inter{}; abstract class Person implements Inter{ }

模拟打印机案例:
        墨盒:彩色、黑白
        纸张类型:A4、B5
        墨盒和纸张都不是打印机厂商提供的
        打印机的打印功能需要使用兼容市场上的墨盒、纸张
        测试

interface Mohe{
function color();
}
interface Paper{
function sizes();
} class Printer {
function prints(Mohe $m,Paper $p){
echo "即将开始打印...<br>";
$m->color();
$p->sizes();
echo "开始打印...<br>";
echo "打印完毕!!!<br>";
}
} class black implements Mohe{
function color(){
echo "正在装载墨盒...<br>";
echo "装载黑色墨盒成功...<br>";
}
} class colors implements Mohe{
function color(){
echo "正在装载墨盒...<br>";
echo "装载彩色墨盒成功...<br>";
}
} class A4 implements Paper{
function sizes(){
echo "正在加载纸张...<br>";
echo "加载A4纸张成功...<br>";
}
} class B5 implements Paper{
function sizes(){
echo "正在加载纸张...<br>";
echo "加载B5纸张成功...<br>";
}
}
$parint = new Printer();
$parint->prints(new colors(), new A4());

[多态]
1、一个类被多个子类继承
 如果,这个类的某个方法,再多个子类中,表现出不同的功能,我们称这种行为为多态
 2、实现多态的必要途径
 ①子类继承父类;
 ②子类重写父类方法;
 ③父类引用指向子类对象;

abstract class Persom{
abstract function say();
} class Chinese extends Persom{
function say(){
echo "我是中国人,我说中国话";
}
}
class English extends Persom{
function say(){
echo "I'm an English,I speak English";
}
}
/*$c = new Chinese();
$c ->say();
$e = new English();
$e ->say();
*/
function func(Person $p){
$p ->say();
}
func(new Chinese());
func(new English());

面向对象 OOP中的抽象类,接口以及多态的更多相关文章

  1. C# 你什么让程序员寂寞成酱紫 (男生版 娱乐中学习 抽象类 接口 继承 实现方法 )

    你什么让程序员寂寞成酱紫 (男生版 娱乐中学习 抽象类 接口 继承 实现方法 )   一个家庭 相当于 一个空间,这个空间里 有 很多元素,比如 爱,爱这个抽象事物,可能有很多动作,接吻.交流,对于一 ...

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

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

  3. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

  4. 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装

    抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...

  5. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)

    一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...

  6. python day - 19 抽象类 接口类 多态 封装

    一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...

  7. 【PHP面向对象(OOP)编程入门教程】21.多态的应用

    多态是除封装和继承之外的另一个面象对象的三大特性之一,我个人看来PHP中虽然可以实现多态,但和c++还有Java这些面向对象的语言相比,多 态性并不是那么突出,因为PHP本身就是一种弱类型的语言,不存 ...

  8. PHP面向对象(OOP):抽象方法和抽象类(abstract)

    在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口.而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和抽象方法的定义再说明它的用途. 什么是抽象方 ...

  9. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

随机推荐

  1. 菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法

    项目中信息提示框,貌似只有个DisplayAlert,信息提示太过于单一,且在有些场合Toast更加实用,以下是一个简单的原生Toast的实现方法 项目地址:https://github.com/we ...

  2. Starling开源手势库AcheGesture

    http://news.9ria.com/2012/1220/25686.html AcheGesture -一个Flash的开源框架 特点: 提供7个基本的手势,包括:单击.双击.捏.来回滑动.猛击 ...

  3. 造个轮子之基于 Netty 实现自己的 RPC 框架

    原文地址: haifeiWu和他朋友们的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 服务端开发都会或多或少的涉及到 RPC 的使用,当然如果止步于会用,对 ...

  4. Javascript中的闭包(转载)

    前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.下面是作者从作用域链慢慢讲到 ...

  5. Ubuntu16.04实用python脚本 - JDK的配置!

    前提已经把Oracle JDK解压缩到指定目录了,我的JDK目录是:“/usr/jdk1.8.0_121” 全部脚本: # coding=utf-8 ,中文注释需要加入编码格式 #这是我的测试文件,在 ...

  6. kvm虚拟机动态迁移

    相比KVM虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可 ...

  7. 百度地图API —— 制作多途经点的线路导航

    [百度地图API]如何制作多途经点的线路导航——驾车篇   摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ------ ...

  8. redis 学习笔记(一)

    redis 基本类型 String 基本操作: GET 获取存储在给定键中的值 SET 设置存储在给定键中的值 DEL 删除存储在给定键中的值 List 基本操作: LPUSH/RPUSH 从左/右推 ...

  9. springMvc 中返回字符串 乱码解决

    /** * produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8" 乱码解决 * @param callback * ...

  10. 分分钟钟学会Python - 数据类型(set)

    目录 今日内容 具体内容 1.集合含义 2.独有方法 3.公共方法 4.特殊情况 5.总结 @ 今日内容 集合(set) 具体内容 1.集合含义 一个无序的不重复元素序列. 可以使用大括号 { } 或 ...