<?php
/**
1.定义为抽象的类不能被实例化,
2.任何一个类如果它里面至少有一个方法是抽象的那么这个方法也必须声明为抽象的。
3.子类继承一个抽象父类时,子类必须定义父类中的所有的抽象方法,而且访问控制符必须和父类一样(或者更为宽松)
4.被定义的抽象方法只是声明了其调用方式(参数),不能具体的功能实现
*/
/*错误的,因为类中如果有抽象方法,那么这个类也必须声明为抽象的
class A
{
abstract function get();
}
*/
abstract class AbstractClass
{
//public abstract function abs();如果加上这一句,就会出现错误,因为下面的子类没有实现父类中的这个抽象方法。
protected abstract function getValue();
protected abstract function prefixValue($prefix);
public function printOut()
{
print $this->getValue()."<br>";
}
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue()
{
return "ConcreteClass1";
}
public function prefixValue($prefix)
{
return "{$prefix} ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{
public function getValue()
{
return "ConcreteClass2";
}
public function prefixValue($prefix)
{
return "{$prefix} ConcreteClass2";
}
}
class ConcreteClass3 extends AbstractClass
{
/*错误,子类的访问修饰符必须必父类的宽松或者一样,但是不能更小。
private function getValue()
{
echo "a";
}
*/
public function getValue()
{
}
public function prefixValue($prefix)
{
return "$prefix";
}
}
//$a = new AbstractClass(); 报错,抽象类不能被实例化
$class1 = new ConcreteClass1();
$class1->printOut();
echo $class1->prefixValue('Foo');
?>
<?php
abstract class AbstractClass
{
protected abstract function prefixName($name);
}
class ConcreteClass extends AbstractClass
{
//子类可以定义父类中不存在的参数,就是方法重写(覆盖)
public function prefixName($name, $separator =".")
{
if($name == "Pacman")
{
$prefix ="MR";
}
else if($name =="Pacwoman")
{
$prefix ="mrs";
}
else
{
$prefix ="";
}
return $prefix.$separator.$name;
}
}
$class = new ConcreteClass();
echo $class->prefixName("Pacman")."<br>";
echo $class->prefixName("pacwoman");
?>
php中抽象类和方法知识点
最新推荐文章于 2024-07-24 13:13:54 发布