摘要:一抽象方法和抽象类抽象方法一个方法如果没有方法体没有,直接分号结束,使用关键字修饰的方法,即是抽象方法抽象类如果类中有一个方法是抽象方法,则这个类是抽象类,该类使用来修饰注意抽象类中不一定必须有方法抽象类中有抽象方法抽象类不能创建对象其他方
一、抽象方法和抽象类
1.抽象方法:一个方法如果没有方法体(没有{},直接分号结束,使用abstrract关键字修饰的方法),即是抽象方法
2.抽象类:如果类中有一个方法是抽象方法,则这个类是抽象类,该类使用abstract来修饰
注意:
1.抽象类中不一定必须有方法 2.抽象类中有抽象方法 3.抽象类不能创建对象 4.其他方面与一般类完全一样 5.抽象类必须有子类,子类将抽象类的抽象方法覆盖,就有方法体了 6.子类必须覆盖全部抽象方法,才能创建对象,如果只实现部分抽象方法,则子类还是抽象类
3.抽象方法的作用:规定了子类必须有(覆盖)这个方法,具体功能交给子类(按自己的功能)实现
4.抽象类的作用:抽象类要求了子类的结构,就是一个规范(程序员不能不写某种方法)
abstract class Person {
abstract function eat();
abstract function sleep();
function walk(){}
};
class Men extends Person {
function eat(){
echo "吃米饭
";
}
function sleep(){
echo "睡床
";
}
};
class Women extends Person {
function eat(){
echo "吃面
";
}
function sleep(){
echo "睡床
";
}
};
$s=new Men;
$s->eat();//吃米饭
二、面向对象的接口技术
1.接口是一种特殊的抽象类(有抽象类所有特性)
2.接口与一般抽象类的区别(接口也是一种规范)
a.接口内所有方法必须全是抽象方法 b.接口中属性必须是常量(const声明) c.接口内权限必须是public(默认即是,不必声明),抽象类可以有protected d.声明接口不使用class,而是interface e.接口中的抽象方法不需要abstract特殊声明,因为都是 f.可以用类::访问属性/方法
interface Demo {
const NAME="wo";
function test();
}
3.接口的特性
a.接口可以继承另一个接口(extends),但只有扩展关系,没有覆盖关系 b.可以使用一般类实现接口的*全部方法*(抽象方法必须全部覆盖),即有覆盖关系 c.可以使用抽象类来实现接口的*部分方法*,即有覆盖关系 d.只要是覆盖关系,即使用类/抽象类来实现接口,就要用implements关键字 e.extends:一个类只能有一个父类 f.implements:可以在使用extends继承其他类的同时,进行对接口的实现,可以实现多个接口(一定要先extends,再implements) g.实现多个接口,以逗号分开多个接口名即可
interface Demo {
const NAME="wo";
function test1();
function test2();
};
interface Test extends Demo {
function test3();
};
class World {
function test4(){
}
};
interface Abc {
function test5();
}
class Fina extends World implements Test,Abc {
function test1(){
echo "test1
";
}
function test2(){
echo "test2
";
}
function test3(){
echo "test3
";
}
function test4(){
echo "test4
";
}
function test5(){
echo "test5
";
}
};
$p=new Fina;
$p->test1();//test1
$p->test2();//test2
$p->test3();//test3
$p->test4();//test4
$p->test5();//test5
三、多态性(各个子类的形态功能不同)
1.必须有继承关系,父类最好是接口或抽象类,如下为模拟USB接口下鼠标和键盘的多态,以及使用者进行调用的情况
interface USB {
const WIDTH = 12;
const HEIGHT = 3;
function load();
function run();
function stop();
};
class Mouse implements USB {
function load(){
echo "加载鼠标成功!
";
}
function run(){
echo "运行鼠标功能!
";
}
function stop(){
echo "鼠标工作结束!
";
}
};
class Keyboard implements USB {
function load(){
echo "加载键盘成功!
";
}
function run(){
echo "运行键盘功能!
";
}
function stop(){
echo "键盘工作结束!
";
}
};
class Computer {
//只要是继承自USB抽象类的对象,不论什么设备,都执行三个方法
function useUSB(USB $usb){
$usb->load();
$usb->run();
$usb->stop();
}
};
class Workers {
function work(){
$c=new Computer;
$m=new Mouse;
$k=new Keyboard;
$c->useUSB($m);
$c->useUSB($k);
}
};
$w=new Workers;
$w->work();
//加载鼠标成功!
//运行鼠标功能!
//鼠标工作结束!
//加载键盘成功!
//运行键盘功能!
//键盘工作结束!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25589.html
摘要:多态性面向对象三大特性封装继承多态。面向对象多态性存在的三个必要条件继承重写父类引用指向子类对象多态性的实现方式重写与重载静态多态性方法重载方法重载允许类具有多个相同名称的方法,但是方法参数列表不同。 多态性 面向对象(OOP)三大特性:封装、继承、多态。 多态性(polymorphism)指同一行为具有多种不同表现形式,在面向对象程序设计中表现为同一消息可以根据发送对象的类型不同,做...
摘要:封装是面向对象的特征之一,是对象和类概念的主要特性。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。构造函数通常被用来自动执行很多初始化操作。 之前的相关问题 面向对象和面向过程的差别,各自的优缺点 面向对象有哪些基本特性?各自特性带来哪些好处 面向对象的基本语法? 面向对象的基本特性的基本实现 面向对象结合各种设计模式...
小编写这篇文章的主要目的,主要是来给大家介绍关于Python的一些事情,主要还是涉及到面对面对象编程的一些实例,其中,主要涉及到的内容涵盖封装、继承、多态等多种形式,就具体的形式,下面就给大家详细解答下。 Python是一门面向对象的语言。面向对象都有三大特性:封装、继承、多态。 下面分别来说说这三大特性: 1、封装 隐藏对象的属性和实现细节,仅对外提供公共访问方式。在python中用...
摘要:实现多态的三个必要条件继承在多态中必须存在有继承关系的子类和父类。参考面试题解惑系列九继承多态重载和重写面向对象三大特性封装,继承,多态以及抽象接口的介绍 版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009141566 1. 面向对象编程的三大特性 Java 面向对象编程有三大特性:封装、继承、多态。 1.1 封装...
阅读 2063·2023-04-26 01:02
阅读 5618·2021-11-24 09:39
阅读 2048·2019-08-30 15:44
阅读 3354·2019-08-30 11:10
阅读 1973·2019-08-30 10:49
阅读 1248·2019-08-29 17:06
阅读 873·2019-08-29 16:15
阅读 1039·2019-08-29 15:17