学习总结
- 类的继承:子类可以继承所有父类中的属性和方法,但是父类中的private属性在子类中是不能被访问的
- 类的扩展:子类中除了使用父类的属性和方法,还可以添加自己的属性和方法
- 类的重写:父类中的属性和方法可以在子类中被重新定义
- 抽象类是不可以被实例化的类,但是可以被继承,实现了设计和实现部分分离
- 接口中可以定义抽象方法(没有方法体的方法),普通类继承后必须重写并且实现该方法,实现了设计与实现完全分离
1.类的继承,类属性和方法的继承,扩展和重写
<?php
class StuInfo
{
protected $name = 'angle';
protected $age = 32;
protected $sex = '女';
protected static $school = '人民大学';
public function printInfo()
{
echo '姓名:',$this ->name,'<br>';
echo '年龄:',$this ->age,'<br>';
echo '性别:',$this ->sex,'<br>';
}
public static function printSchool()
{
echo '学校名称:',self::$school,'<br>','<hr>';
}
}
//类的继承:子类继承父类的所有属性和方法
class ClassInfo extends StuInfo
{
//子类可以对父类的属性进行扩展
protected $class = '05-01';
//子类可以对你类的方法进行重写
public function printInfo()
{
parent::printInfo();
echo '所在班级:',$this->class,'<br>';
parent::printSchool();
}
//子类也可以对父类的方法进行扩展
public function editInfo($name,$age,$sex,$class)
{
$this ->name = $name;
$this ->age = $age;
$this ->sex = $sex;
$this ->class = $class;
}
}
$stu1 = new ClassInfo();
$stu1 ->printInfo();
$stu2 = new ClassInfo();
$stu2 ->editInfo('hugn',31,'男','05-02');
$stu2 ->printInfo();
?>
- 代码运行效果图
2.抽象类的使用
<?php
//抽象类不能被实例化,只能被继承,抽象类的作用,完成部分设计与实现分离
abstract class StuInfo
{
protected $name = 'angle';
protected $age = 32;
protected $sex = '女';
protected static $school = '人民大学';
public function printInfo()
{
echo '姓名:',$this ->name,'<br>';
echo '年龄:',$this ->age,'<br>';
echo '性别:',$this ->sex,'<br>';
}
public static function printSchool()
{
echo '学校名称:',self::$school,'<br>';
}
}
//抽象类不能被实例,只能被继承
abstract class departInfo extends StuInfo
{
protected $department = '计算机系';
public function printInfo()
{
parent::printInfo();
echo '所在系:',$this -> department,'<br>';
}
}
//普能类可以被实例化,可以继承抽象类
class ClassInfo extends departInfo
{
protected $class = '05-01';
public function printInfo()
{
parent::printInfo();
echo '所在班级:',$this ->class,'<br>';
parent::printSchool();
echo '<hr>';
}
public function editInfo($name,$age,$sex,$department = '计算机系',$class = '05-01')
{
$this ->name = $name;
$this ->age = $age;
$this ->sex = $sex;
$this ->department = $department;
$this ->class = $class;
}
public static function editSchool($school)
{
self::$school = $school;
}
}
$stu1 = new ClassInfo();
$stu1 ->printInfo();
$stu2 = new ClassInfo();
$stu2 ->editInfo('hugn',31,'男');
$stu2 ->printInfo();
$stu3 = new ClassInfo();
$stu3 ->editInfo('lucy',35,'女','工商管理','06-02');
$stu3 ->editSchool('清华大学');
$stu3 ->printInfo();
?>
- 代码运行效果图
3.接口的使用
<?php
//接口的定义与类的定义相类似
interface iStuInfo
{
const CITY = '北京';
public function printInfo();
public function editInfo($name,$age,$sex,$department = '计算机系',$class = '05-01');
public function printCity();
}
class StuInfo implements iStuInfo
{
protected $name = 'angle';
protected $age = 32;
protected $sex = '女';
protected $class = '05-01';
protected $department = '计算机系';
protected static $school = '人民大学';
public function printInfo()
{
echo '姓名:',$this ->name,'<br>';
echo '年龄:',$this ->age,'<br>';
echo '性别:',$this ->sex,'<br>';
echo '班级:',$this ->class,'<br>';
echo '所在系:',$this ->department,'<br>';
echo '学校名称:',self::$school,'<br>';
}
public function editInfo($name,$age,$sex,$department = '计算机系',$class = '05-01')
{
$this ->name = $name;
$this ->age = $age;
$this ->sex = $sex;
$this ->department = $department;
$this ->class = $class;
}
public function printCity()
{
echo '所在城市:',iStuInfo::CITY,'<br>';
echo '<hr>';
}
}
$stu1 = new StuInfo();
$stu1 ->printInfo();
$stu1 ->printCity();
$stu2 = new StuInfo();
$stu2 ->editInfo('hugn',31,'男');
$stu2 ->printInfo();
$stu2 ->printCity();
?>
- 代码运行效果图