抽象类

抽象类
abstract;
使用的原因:
1,在开发中,我们可以有一种类,是其他类的父类,本身不要实例化
    是用于子类的一种规范,让子类来继承,达到代码复用,
   语法:abstract class 类名{

        //方法
        //属性
        
          }
2.用abstract 来修饰,类是抽象类,方法是抽象方法(不能有方法体);
  抽象类不一定要有抽象方法;
<?php

abstract class abc{

    public $name;
    protected $age;

    abstract function cry();

}

 class a extends abc{
 
    public function  cry(){
    
        echo "叫声";
    
    }
 
 }
 $p1=new a();
 $p1->cry();

?>

子类继承了一个抽象类,那么子类是抽象类或者子类中重写父类中抽象方法;

接口:
接口就是给出一些没有实现的方法,封装在一起,当某个类要用的时候
在根据具体情况把接口中的方法写出来;
<?php

    //使用程序模拟现实的接口
    //定义规范(方法/属性)

    interface iusb{
    
        public function start();
        public function stop();
    
    }
    //编写类,让它去实现接口
    //1 当一个类实现某个接口,则要求该类必须实现这个接口的所有方法
    class camera implements iusb{
    
        public function start(){
        
            echo "相机工作<br/>";
        }
        public function stop(){
        
            echo "相机停止工作";
        
        }
    
    }
$cameral=new camera();
$cameral->start();
$cameral->stop();
?>

语法:
interface 接口名{

    //属性
    //方法

}
接口中的方法不能有方法体;

实现接口:
class 类名 implements 接口名1,接口名2{


}
体现了编程中中我们希望,高内聚低偶合;
接口的难点在于不知道什么时候使用它:
1.定规范
2.定下规范,让别的程序员实现;
3.当多个类它们之间是平级的,这些类要实现某功能,但方式不同

接口细节:
1.接口不能去实例化;
2.接口中的所有方法都不能有方法体;
3.一个类可以有多个接口,用逗号隔开;
  class aaa implements 接口1,接口2{
  }
4,接口中可以有属性,但必须是常量,默认是public
   常量是放在内存中的常量区的,没有和某个对象关联;
5.接口的方法是public ,不能是protected或者不能是private;
6.接口aa可以继承多个别的接口;类就必须实现接口aa中的所有方法和aa所继承的
  接口中的方法;
 



继承和实现接口的比较
1 实现接口是对单一继承的补充
2 可以不破坏类的层级关系,而对类进行功能扩展;

final关键字:
1.使某个类不被其它的类来继承
<?php

    final class a{
    //不能被继承
    }
    class b extends a{
    //报错
    
    }

?>
2 类可以被继承 但使某个方法不被重写;
<?php

    class a{
        final public function getrate($salary){
            
            return $salary*0.08;
        
        }
    }
    class b extends a{
    
        public function getrate($sal){
            
            return $salary*0.01;
        
        }//错误
    }
$b=new b();
echo $b->getrate(100);

?>

3,final 不能去修饰属性(变量);

const 常量:
1,不希望一个成员变量被修改;
class A{

    const 常量名=赋初值

}

interface 接口名{

    const 常量名=赋初值;

}
常量是public类型
访问:   类名::常量 或者 接口名::常量,在类内部;self::常量;

2,定义的时候,必须给初值;

posted on 2012-12-13 01:15  磊W磊  阅读(156)  评论(0)    收藏  举报

导航