OOP 的三大特征
封装,继承, 多态
封装:将数据和对数据的操作捆绑到一起。隐藏了数据以及数据的处理,但是对外提供了操作的接口(公共的方法)
封装是可以分层次的。
继承:指的是当封装的层次低于某个层次的时候,低层次的封装可以直接从高层次的封装(class)去获得其已经拥有的属性或者方法。
多态:多种形态。在面向对象里,可以存在多个同名的方法,要求每个方法的参数列表或者返回值类型不一样。(PHP不支持多态)
重载 :对一个同名函数,使用不同的实现方式
PHP:错误的
class Person{
public function zuocao(小学生){
小学生做操
}
public function zuocao(){
做操
}
}
JAVA :正确
class Person{
public string function zuocao(){
return 字符串;
}
public Int function zuocao(){
return 整型;
}
Public int function zuocao(int str){
return str;
}
}
PHP继承
语法:class 子类 extends 父类
子类:继承其他类的类称之为子类。
父类:封装的最高层的类,被继承的类称之为父类。
继承到底继承了哪些东西?
继承了属性,非私有的方法(普通的)
属性继承:
方法继承:
protected:受保护的,指的是在继承链上,都可以在另外的类(不论子类和父类)都可以使用受保护的方法或者属性
继承和访问的原理
继承冲突
子类中有与父类相同的属性或者方法,那么这个时候就出现了继承冲突。
重写:overwrite,子类拥有与父类同名的属性或者方法。意味着一个类中只有一个改名字的方法。
注意
1.如果父类的的方法是私有的,那么子类拥有同名方法的时候,不是重写
2.重写父类方法的时候,子类里面的访问修饰限定符必须要比父类的级别低
单继承
PHP中一个子类只能继承自一个父类
错误
如果非要继承多个类,是可以做到的。链式继承。
特殊类:不能被继承的类,只能被继承的类
final类:当前类已经是最末尾的了
语法:Final class 类名
final的意义:不希望当前类还被别的类继承。防止类被扩展。
final还能修饰方法,表示方法不能被重写
final关键字只能修饰类和方法,不能修饰属性。
abstract 类: 抽象类 ,只能被继承
语法:abstract class 类名
抽象类指的是拥有抽象方法
抽象方法:使用abstract关键字修饰,没有方法体的方法
实例化 抽象类
继承自抽象类的子类必须实现抽象类里的抽象方法(或者将当前子类也声明成抽象类)
抽象类中可以有哪些东西?
凡是正常类出现的东西(属性,方法和常量)都可以在抽象类中出现。
抽象类的意义?
1.抽象类只能被继承,用来规范子类的结构。