首页> 基础笔记 >PHP基础学习 >面向对象 面向对象

PHP面向对象之抽象方法和抽象类

作者:小萝卜 2019-09-04 浏览 1035

简介包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract 修饰的类为抽象类) ,抽象类的特点:不能实例化,也就new成对象,若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。

PHP面向对象之抽象方法和抽象类

在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。而抽象方法就是为了方便继承而引入的。

当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束,象这种方法我们叫抽象方法,必须使用关键字abstract定义。

如: public abstract function fun();
包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract 修饰的类为抽象类)

抽象类的特点:
不能实例化,也就new成对象
若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。

其实抽象类对于子类(实现类),有一个约束的作用,

含有抽象方法的类肯定是抽象类,但是不是所有的抽象类都必须包含抽象方法。

实例1:
<?php
    //声明一个抽象类,要使用abstract关键字标识
    abstract class Person {             
        protected $name;                //声明一个存储人的名字的成员
        protected $country;             //声明一个存储人的国家的成员  
        pubic function __construct($name="", $country="china") {  
            $this->name = $name;                     
            $this->country = $country;                 
        }
        
        //在抽象类中声明一个没有方法体的抽象方法,使用abstract关键字标识
        public abstract function say();        
    
        //在抽象类中声明另一个没有方法体的抽象方法,使用abstract关键字标识
        public abstract function eat();        
        
        //在抽象类中可以声明正常的非抽象的方法
        public function run(){                 
            echo "使用两条腿走路<br>";  //有方法体,输出一条语句
        }
    }

//声明一个类去继承抽象类Person
    class ChineseMan extends Person { 
        //将父类中的抽象方法覆盖,按自己的需求去实现
        public function say() {                
            echo $this->name."是".$this->country."人,讲汉语<br>";    //实现的内容
        } 
        //将父类中的抽象方法覆盖,按自己的需求去实现
        public function eat() {                
            echo $this->name."使用筷子吃饭<br>";                  //实现的内容
        }
    }
    //声明另一个类去继承抽象类Person
    class Americans extends Person {    
        //此处省略 ... ....
    }
    $chineseMan = new ChineseMan("高洛峰", "中国"); //将第一个Person的子类实例化对象
    $americans = new Americans("alex", "美国");           //将第二个Person的子类实例化对象
    $chineseMan -> say();     //通过第一个对象调用子类中已经实例父类中抽象方法的say()方法
    $chineseMan -> eat();      //通过第一个对象调用子类中已经实例父类中抽象方法的eat()方法
    $americans -> say();        //通过第二个对象调用子类中已经实例父类中抽象方法的say()方法
    $americans -> eat();         //通过第二个对象调用子类中已经实例父类中抽象方法的eat()方法

实例2:
 

<?php
//抽象类:
abstract class Demo{
    public static function fun1(){
        echo "fun1....<br/>";
    }
    
    public function fun2(){
        echo "fun2....<br/>";
    }
    
    public abstract function fun3();
    
    /**
     * 求和抽象方法
     * 
     */
    public abstract function add($a,$b);
}

//实现类,定义A类继承Demo类,去实现里面的所有方法。
class A extends Demo{
    public function fun3(){
        echo "fun3....<br/>";
    }
    public function add($a,$b){
        return $a+$b;
    }
}

$a= new A();
$a->fun1();
$a->fun2();
$a->fun3();
echo $a->add(10,20);

 

很赞哦! (0)

文章评论

    高端网站建设