php面向对象之抽象类

抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。
如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,并且这个类必须声明为抽象类
抽象类,不一定有抽象方法,可能全是具体方法,对于这种情况,此类依然不能直接实例化.再用普通类继承一下就可以了.

继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。

用普通类做父类,当模板,子类对其某个方法,可以重写,也可以不重写.

 用抽象类时,抽象方法必须被重写,才能使用.

抽象类比普通父类有如下好下:
一是:指定的方法,必须去重写,实现.
二是: 重写时,参数也必须与父类的相应方法一致.


<?php
abstract class welcome {
    abstract function greet($a,$b,$c);
    abstract function bye();
}

class engwelcome extends welcome{
    public function greet($a,$b) {
        echo 'welcome<br />';
    }


    public function bye() {
        echo 'bye<br />';
    }
}
$ming = new engwelcome();
$ming->greet(3,4);//报错:Fatal error: Declaration of engwelcome::greet() must be compatible with that of welcome::greet() 
?>


如果继承抽象类的子类也是抽象类,覆写父类的抽象方法可以以如下方式写:

<?php
abstract class human {
    abstract public function m1();
    abstract public function m2();
	protected function getVal($val){
		echo $val;
	}
}

abstract class stu extends human{
    public function m1() {
        echo 'm1<br />';
    }
}

abstract class banhua extends stu {
    public function m2() {
        echo 'm2<br />';
	
    }
}

class jin extends banhua {
}

$jin = new jin();
$jin->m2();


?>
总之,必须保证父类的抽象方法全部实现覆写。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类中可以包含抽象方法和非抽象方法,抽象方法必须在子类中被实现,而非抽象方法可以被子类直接继承或重写。 抽象类通常用于建立子类的模板,它定义了子类需要实现的方法和属性,但是并不对具体的实现进行定义。子类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。这种方式可以保证子类的一致性,并且减少了代码的重复。 在 PHP 中,我们可以通过关键字 abstract 来定义一个抽象类,而抽象方法则需要在方法名前面加上 abstract 关键字,同时省略方法体。例如: ``` abstract class Animal { abstract public function eat(); } ``` 上面的代码定义了一个抽象类 Animal,其中包含一个抽象方法 eat()。由于这个方法是抽象的,所以不能有具体的实现。 当一个类继承了抽象类 Animal,并且没有实现 eat() 方法时,PHP 就会发出一个 Fatal error 错误。例如: ``` class Cat extends Animal { } ``` 上面的代码会报错,因为 Cat 没有实现抽象方法 eat()。 如果我们要让 Cat 继承 Animal,就必须实现 eat() 方法,例如: ``` class Cat extends Animal { public function eat() { echo "Cat is eating...\n"; } } ``` 这样,Cat 就可以实例化了,并且可以调用 eat() 方法。 总之,抽象类是一种用于建立子类模板的特殊类,它定义了子类需要实现的方法和属性。子类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值