面向对象 OOP中的抽象类,接口以及多态

[抽象类与抽象方法]
 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 = 10;

     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());
时间: 2024-10-05 19:44:13

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

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

多态是除封装和继承之外的另一个面象对象的三大特性之一,我个人看来PHP中虽然可以实现多态,但和c++还有Java这些面向对象的语言相比,多 态性并不是那么突出,因为PHP本身就是一种弱类型的语言,不存在父类对象转化为子类对象或者是子类对象转化为父类对象的问题,所以多态的应用并不是那么的明显:所谓多态性是指一段程序能够处理多种类型对象的能力,比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这个方法发放的,但是所发的工资都是不相同的.所以同一个

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

在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口.而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和抽象方法的定义再说明它的用途. 什么是抽象方法?我们在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰: abstract function fun1(); abstract fun

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

一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在new一个新对象时自动调用此函数 二.PHP中都有那些魔术方法,以及它们的作用:1.__construct():构造函数,new对象时自动调用 eg: class Person{ public $name; public $age; function __construct($name,$age){ $

java 面向对象(封装 组合 抽象类 接口)(一)封装组合

1.组合+构造方法  赋值 组合有两种:一个类作为另一个类的属性变量  一个类的对象类型作为另一个类方法的参数 组合的目的:方法的复用(可以使用别的类的方法) 比继承耦合度低. 代码: //测试类 package edu.xust.oo;//面向对象复习 oo//public class TextMain { //赋值可以通过setname进行赋值,或用有参的构造方法进行赋值 public static void main(String[] args) {  //1.组合+构造方法  赋值  

PHP面向对象(OOP)编程入门教程

面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就通过实例来说明使用PHP的OOP进行编程的实际意义和应用方法. 我们通常在做一个有数据库后台的网站的时候,都会考虑到程序需要适用于不同的应用环境.和其他编程语言有所不同的是,在PHP中,操作数据库的 是一系列的具体功能函数(如果你不使用ODBC接口的话).这样做虽然效率很高,但是封装却不够.如果有一

面向对象设计中抽象类与接口的区别

在OOD(面向对象设计)中,经常会用到抽象类或接口,[注:在C++中,没有接口的概念,只有抽象类:而在Java中两者都存在].而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互完全替换.事实上,虽然他们有很多相似点,但也有很大差异. 1.抽象类与接口的出现条件 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类往往用来表征我们

面向对象中的接口和多态

接口的作用是用来制定规范,以便让后面的程序根据这个规范来实现. 接口的声明方式:interface 接口名{},接口只能声明抽象方法,至少要有一个,但是声明的抽象方法前不需要用abstract修饰. 声明一个类实现接口,class demo implements interface_name {},当一个类实现接口的时候,这个类必须实现接口里定义的所有抽象方法.一个类可以既同时继承一个类又实现多个接口,class demo2 extends demo implements interface1,

java基础2:抽象类、接口与多态

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

面向对象,封装,构造方法,this关键字,main,继承,接口,多态阶段性小结

一.局部变量和成员变量 成员变量:  定义在类中变量 局部变量:  定义在方法中变量 1成员变量与局部变量的区别: 应用范围 成员变量在整个类内都有效 局部变量只在其声明的方法内有效 生命周期   成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失 局部变量: 使用完马上释放空间. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 局部变量存在栈内存中,当不在使用时,马上就会被释放. 初始值 成员变量它存储在堆中,如果没有赋初值,它有默