抽象方法、接口、继承、多态、图形计算器_谭小瞎的博客-程序员ITS301

技术标签: 继承  PHP  函数  多态  class  图形  

//抽象方法------------------------------
abstract
     Person.class.php
     <?php 
//抽象类和抽象方法
abstract class Person{
     
    public $name;
    //定义抽象方法
    abstract function say();
    function walk(){
     

    }
}
//$p = new Person; //抽象类不让被实例化

class Student extends Person{
     
    function say(){
     

    }
}
//接口------------------------------
interface
    USB.class.php
    Mouses.class.php
    Person.class.php
//USB.class.php------------------------------
<?php 
/*
 * 1、定义接口USB,在接口中有如下抽象方法
* start,stop,run,
定义子类Mouses,继承接口USB.
*/
interface USB{
     
    function start();
    function run();
    function stop();
}
// Mouses.class.php----------------------------
<?php
include 'USB.class.php'; 
//继承接口USB
class Mouses implements USB{
     
    function start(){
     

    }
    function run(){
     

    }
    function stop(){
     

    }
}
//Person.class.php------------------------------
<?php 
//接口应用举例
interface Person{
     
    //接口中不能有普通的成员方法和成员属性。仅能有常量
    //和抽象方法
    const COUNTRY="china";  
    function say();
}
//接口对于接口的继承
interface Test extends Person{
     

}
//类对于接口的继承
class Student implements Person{
     
    function say(){
     

    }
}
//多态举例------------------------------
USB.class.php
<?php 
header("Content-Type:text/html;charset=utf-8");
//定义接口类
interface USB{
     
    function start();

    function run();

    function stop();
}

//定义鼠标类,继承USB接口
class Mouses implements  USB{
     
    function start(){
     
        echo "我是鼠标,我正在加载<br/>";
    }

    function run(){
     
        echo "我是鼠标,我正在运行<br/>";
    }

    function stop(){
     
        echo "我是鼠标,我正在停止<br/>";
    }
}
//添加继承了USB接口的设备 fan
class Fan implements USB{
     
    function start(){
     
        echo "我是风扇,我正在加载<br/>";
    }

    function run(){
     
        echo "我是风扇,我正在运行<br/>";
    }

    function stop(){
     
        echo "我是风扇,我正在停止<br/>";
    }
}

//定义电脑类,应用鼠标类
class Computer{
     
    function useUsb(USB $u){
     
        //假设 $u是继承了USB接口的类对象
        /*if($u instanceof USB){
            $u->start();
            $u->run();
            $u->stop();
        }else{
            echo "非USB设备";
        }*/     
        $u->start();
        $u->run();
        $u->stop();
    }
}

//定义工人类,将电脑和鼠标结合在一起
class Worker{
     
    function getWork(){
     
        $c = new Computer();
        $m = new Mouses();
        //实例化风扇类
        $f = new Fan();
        $c->useUsb($m);
        $c->useUsb($f);
    }
}
$w = new Worker();
$w->getWork();

图形计算器
    index.php
    Shape.class.php
    Rectangle.class.php
    Circle.class.php
    Tra.class.php
//index.php------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>图形计算器</title>
</head>


<body>
<center>图形计算器</center><br/><br/>
<a href='index.php?action=Rectangle'>矩形</a> | <a href='index.php?action=Tra'>三角形</a> | <a href='index.php?action=Circle'>圆形</a>  
<?php
//自动加载类
function __autoload($classname){
     
    //$classname=Rectangle
    include $classname.'.class.php';
}
//实例化矩形类
//获取类名称
$cname = isset($_GET['action'])?$_GET['action']:"";
if($cname!=""){
    //若用户选择计算矩形
     //cname=Rectangle
     //实例化矩形类
     //$cname 等于类名称
     $obj = new $cname();
     //输出表单
     $obj->view();
     //当用户POST数据后可以开始计算
     if($_POST){
           /*
            * 当用户POST数据以后,就获取到长和宽
            * 此时再次实例化Rectangle类给构造方法
            * 长和宽           
            */        
         $obj = new $cname($_POST);
         echo $obj->name."的周长:".$obj->cir();
         echo "<br/>";
         echo $obj->name."的面积:".$obj->area();

     }
}else{
    //若cname为空,则说明用户没有选中图形,此时给提示
    echo "<br/>请选择要计算的图形";
}

?>

</body>
</html>

//Shape.class.php------------------------------
<?php 
abstract class Shape{
     
    //要求继承抽象类Shape的子类都必须完成计算周长
    abstract function cir();

    //要求继承抽象类Shape的子类都必须完成计算面积
    abstract function area();

    //要求继承抽象类Shape的子类都必须完成输出表单
    abstract function view();

}
//Rectangle.class.php------------------------------
<?php 
//矩形类,完成矩形的周长,面积,表单
class Rectangle extends Shape{
     
    //声明成员属性长和宽,用于计算
    public $name="矩形";
    public $width;
    public $height;

    //定义构造方法,给成员属性赋初值
    function __construct($array=array()){
     
        if(!empty($array)){
            $this->width = $array['width'];
            $this->height = $array['height'];
        }
    }

    //重载父类Shape类中的成员方法cir,计算矩形的周长
    function cir(){
     
        //(长+宽)*2
        $zc = ($this->height+$this->width)*2;
        return $zc;        
    }

    //由于Rectangle类继承了Shape类,必须重载Shape
    //类中的全部抽象成员方法 area
    function area(){
     
        //面积= 长*宽
        $mj = $this->height*$this->width;
        return $mj;
    }

    //重载 view()
    function view(){
     
        //输出表单
        echo "<form action='index.php?action=Rectangle' method='post'>";
        echo $this->name."的宽:<input type='text' name='width' /><br/><br/>";
        echo $this->name."的高:<input type='text' name='height' /><br/><br/>";
        echo "<input type='submit' value='计算' />";      
        echo "</form>";
    }
} 

//Circle.class.php------------------------------
<?php 
class Circle extends Shape{
     
    //定义成员属性
    public $r; //半径
    public $name = "圆形";  

    //定义构造方法 给成员属性赋初值
    function __construct($array=array()){
     
        //仅当$array不为空时,才给成员属性
        //$this->r赋初值
        if(!empty($array)){
            $this->r = $array['r'];
        }
    }



    //Circle继承了Shape类。则Circle必须重载Shape类
    //中的抽象成员方法
    function cir(){
     
        //圆的周长=2*pi()*r
         $zc = 2*pi()*$this->r;
         return $zc;
    }


    function area(){
     
        $mj = pi()*$this->r*$this->r;
        return $mj;
    }

    function view(){
     
        //输出表单
        echo "<form action='' method='post'>";
        echo $this->name."的半径:<input type='text' name='r' /><br/><br/>";       
        echo "<input type='submit' value='计算' />";
        echo "</form>";
    }
}

//Tra.class.php------------------------------
<?php 
//定义三角形类
class Tra extends Shape{
     
    public $name="三角形";
    public $bian1; //三角形的三条边之一
    public $bian2;
    public $bian3;

    //定义构造方法 给成员属性赋初值
    function __construct($array=array()){
     
        if(!empty($array)){
            //当数组$array非空,也就是有POST值时才开始赋值          
            $this->bian1 = $array['bian1'];
            $this->bian2 = $array['bian2'];
            $this->bian3 = $array['bian3'];
        }
    }


    //在三角形类中重载抽象类Shape中的抽象成员方法
    function cir(){
     
        //三角形的周长=边1+边2+边3
        $zc = $this->bian1+$this->bian2+$this->bian3;
        return $zc;
    }

    //继承Shape类中的抽象成员方法area.
    function area(){
     
        //计算三角形的面积 海伦公式
        $p = ($this->bian1+$this->bian2+$this->bian3)/2;
        $mj = sqrt($p*($p-$this->bian1)*($p-$this->bian2)*($p-$this->bian3));
        return $mj;
    }

    //继承Shape类,重载Shape类中的全部抽象方法,重载function view()
    function view(){
     
        //输出表单
        echo "<form action='' method='post'>";
        echo $this->name."的边1:<input type='text' name='bian1' /><br/><br/>";
        echo $this->name."的边2:<input type='text' name='bian2' /><br/><br/>";
        echo $this->name."的边3:<input type='text' name='bian3' /><br/><br/>";
        echo "<input type='submit' value='计算' />";
        echo "</form>";
    }

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014804506/article/details/54783024

智能推荐

设计模式 考试题+答案_披风秃头侠的博客-程序员ITS301_设计模式考试题

一、选择题1.( A )模式的关键是将一个对象定义为原型,并为其提供复制自己的方法。A.原型 B.创建者 C.工厂方法 D.迭代2.下面的类图表示的是哪个设计模式?(B ) A装饰模式(Decorator) B策略模式(Strategy)C桥接模式(Bridge) D观察者模式(Observer)转存失败重..._1671465600

微机原理程序“大小写转换”问题详细讲解_乔洪涛的博客-程序员ITS301_微机原理大小写转换程序

&gt; 大小写转换问题,先看一下大小写字母的ASCII码值A 十六进制 41H 十进制65B 十六进制 42H 十进制66C 十六进制 43H 十进制67D 十六进制 44H 十进制68E 十六进制 45H 十进制69F 十六进制 46H 十进制70a 十六进制 6..._1671465600

input upload 问题归纳_Lucy酱的博客-程序员ITS301

DOM:&lt;inputid="uniqueId" type="file" accept=".txt,.ppt"onChange={fileChange} multiple/&gt;注意:1、当一个页面多个upload input,id必须唯一,不然fileChange后set值会错乱2、fileChange上传的file temp,不能将file temp转换成String再转换回Object。如: (1)例子:fileChange后得到的变量为data,JSO...

离骚_mseaspring的博客-程序员ITS301

帝高阳之苗裔(yì)兮,朕皇考曰伯庸。高阳:颛顼之号。苗裔:苗,初生的禾本植物。裔,衣服的末边。此苗裔连用,喻指子孙后代。朕:我。皇考:对亡父的尊称。摄提贞于孟陬(zōu)兮,惟庚(gē...

Qt 5.15 LTS版本 安装教程 在线安装_超级大洋葱806的博客-程序员ITS301_qt 5.15 lts

Qt 发布公告:http://download.qt.io/official_releases/qt/5.15/5.15.0/OFFLINE_REAMDE.txt内容是:从 Qt 5.15 开始,开源版本,无论是不是 LTS,都只能在线安装。如果确实需要离线安装包,则要购买 Qt for Small Business 产品:https://www.qt.io/blog/available-now-qt-for-small-business这里举例 Qt 5.15 的在线安装方法。下载速度大概在

AES算法破解_supergame111的博客-程序员ITS301

AES算法基本知识<br />AES的全称是Advanced Encryption Standard,即高级加密标准。该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael 作为其最终算法,并于2001年被美国商务部部长批准为新的联邦信息加密标准(FIPS PUB 197)。<br />FIPS PUB 197中说明该标准的正式生效日期是2002年5月26日。该标准将被NIST每5年重新评估一次。<br />AES采用的Rijndael算法的设计者是J

随便推点

Miracast/鼠标显示的那些事_wirelessdisplay的博客-程序员ITS301

· Miracast:     关于Miracast的基础知识,大家可以baidu,google自行搜索,作为入门进行学习。如果进入开发阶段,则需要学习三篇白皮书:Wi-Fi_Display_Specification_v1.1、WiFi_P2P_Technical_Specification_v1.2及HDCP Interface Independent Adaptation Specifi...

canvas清除绘制问题,不影响图片_Cenergy的博客-程序员ITS301_canvas清除手绘

html5 canvas清除绘制问题,使用离屏canvas,不影响图片代码如下,照片替换一下。效果如下:&amp;amp;amp;amp;amp;lt;!DOCTYPE html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html lang=&amp;amp;amp;amp;quot;en&amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;head&amp

OO系统设计师之路--分析模型系列(1)--什么是分析模型 [从老博客搬家至此]_coffeewoo的博客-程序员ITS301

分析模型是高层次的系统视图,在语义上,分析类不代表最终的实现。它是计算机系统元素的高层抽象。笔者认为分析模型正是OO设计的核心,而设计类只是OO的实现手段。分析模型是MVC模式的经典应用。对比分析类的名称,MVC模式,读者应该能够发现分析类在OO和商业目标中精妙的对应关系:人,事,物,规则--actor,boundary,engity,control。这就是为什么笔者说分析模型是OO设计的核心。

你们要的Java学习路线书单来了!_Java技术栈的博客-程序员ITS301

点击关注公众号,Java干货及时送达中秋快乐,今天文末又要送 10本书,不要错过~想从Java小白进阶到Java架构师,这一篇Java学习路线汇总内容不容错过!我搜罗了各大主流公司面试和...

java 中括号中的语句,Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。..._就是雪的博客-程序员ITS301

Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。更多相关问题下列哪项措施不能提高砌体受压构件的承载力()?商业银行办理个人储蓄存款业务,应当遵循地原则()。(商业银行法第29条)违反本法规定,()由有关主管部门按照各自职责分工,没收违法所得、违法生产经营的食品和用于违法生产经营的工具、设备、原料等物品;违法生产经营的食品货值金额不足一万元的,并处二千元以上...

Optional java 用法_Java8 Optional用法_13134722143的博客-程序员ITS301

Optional类提供了大约10种方法,我们可以使用它们来创建和使用Optional类,下面将介绍如何使用它们。创建一个Optional类这是用于创建可选实例的三种创建方法。static [Optional] [empty]()返回一个空的Optional实例。// Creating an empty optionalOptional empty = Optional.empty();在返回一个...

推荐文章

热门文章

相关标签