抽象类与接口
接口
接口的方法是公共的
接口的方法默认是抽象的
接口不能有属性(常量可以有)
类如果去实现接口,必须实现接口中的所有方法才能实例化
类可以实现接口
接口也可以继承接口
接口不是类,它不能有构造函数,接口的所有方法都必须是public的,而且不能有自己的属性。
我们用interface表示接口
interface iguan{
public function age();
public function name();
}
interface aguan extends iguan{
public function eye();
}
这里我们定义了两个接口,使用interface来声明一个接口,这里的iguan和aguan都是接口的名字,其中iguan这个接口有age和name两个方法,而aguan这个接口只有eye这个方法。
接口是不能定义方法的实现的,它只能定义一个方法名,后面跟一个分号即可。
接口可以理解为类的简洁版,接口不能定义属性,接口可以继承,接口不能被实例化。
总结接口的特点:
如何使用接口呢?
实例:
interface iguan{
function eye();
}
class star implements iguan{
function eye(){
echo "罐罐苦读资治通鉴。";
}
}
$guan=new star();
$guan->eye();
这里先定义一个接口iguan,接口中定义了一个方法eye,然后类star通过关键字implements来实现这个接口,而且它重写了这个eye的方法。
我们创建这个类的对象,然后正常调用就可以了。
执行结果为:
罐罐苦读资治通鉴。
类实现接口
一个类可以实现多个接口,多个接口之间用逗号分开即可。
一个类必须重写它所实现的接口里所有方法
接口的作用就是它定义了一些实现的路径。
========================================================
抽象类
所谓抽象类就是比较抽象的类,这些类里至少包含一个抽象的方法,抽象方法不能给出实现,它和接口中的方法很相似,只能给出一个方法名。
抽象类和抽象方法都被“abstract“来修饰,来说明,它们是”抽象的“。
抽象类和普通类的区别之一就是抽象类不能被实例化,抽象类不是接口,它可以有自己的属性和不抽象的方法。
总结:
类前加 abstract 是抽象类
方法前加 abstract 是抽象方法
抽象类不能实例化
抽象方法不能有方法体
有抽象方法则此类必是抽象类
抽象类内未必有抽象方法
但是---即便一个抽象类内是具体的方法,但类是抽象的不能实例化。
通过继承可以实例化子类。
抽象类存在的意义
如果一个类使用abstract来修饰,则该类就是抽象类,如果一个方法被
abstract修饰,则该方法就是抽象方法【抽象方法就不能有方法体
后面要用;结尾】
abstract修饰,则该方法就是抽象方法【抽象方法就不能有方法体
抽象类不能够被实例化
抽象类可以没有抽象方法.同时还可以有实现了的方法
如果一个类中,只要有抽象方法,则该类必须声明为abstract
如果某个类继承了一个抽象类,则要求这个类必须要实现那个抽象类的全部抽象方法
不然无法new。
不然无法new。
===========================================================
抽象类与接口的区别
抽象类仍然是一个类,它有自己的属性和方法,但是必须有一个抽象的方法。该方法不能有实现,而且必须被abstract修饰。
接口不能有属性,而且所有方法都是不能实现的,它不需要用abstract修饰。
一个子类只能实现继承一个抽象类,但是一个子类可以继承多个接口。
接口可以有子接口,抽象类也可以有子抽象类。