抽象类
定义抽象类用关键字:abstract
,继承抽象类用关键字:extend
。
抽象类是至少具有一个抽象方法的类。继承抽象类的类需要实现抽象方法。不能通过抽象类创建对象,需要通过抽象类的继承类来创建对象。
特性
- 抽象类不能被实例化。一个类中至少有一个抽象方法,那么这个类就必须声明为抽象类;
- 抽象类中可以没有抽象方法,但是抽象方法必须是空方法;
- 继承抽象类,子类必须重写父类的抽象方法,访问控制必须和父类一样或者比父类宽松;
- 抽象类可以继承抽象类,但不能重写父类的抽象方法,可以理解为父类的扩展;
-
接口类
定义接口类用关键字:
interface
,继承接口类用关键字:implements
。
对方法的抽象叫做接口。通俗点说,就是接口内的方法必须都是抽象方法。
特性 接口不能实例话,接口中的方法必须都是抽象方法;
- 接口中的方法必须是公共的;
-
两者的区别
相同点
两者都是抽象类,都不能直接实例化;
-
不同点
定义和继承用的关键字不同;
- 一个类可以实现多个接口,但一个类只能继承一个抽象类;
- 接口强调的时特定功能的实现,抽象类强调的时所属关系;
- 接口中方法的修饰符默认也必须时public,抽象类中的方法可以用public、protected、不能用 private;
- 接口中的抽象方法前不用也不能加 abstract 修饰,默认隐式就是抽象方法,也不能用 final 关键字来防止子类实现。抽象类中的凑下方法前必须加 abstract 表示显示声明为抽象方法。
- 接口中的每个方法都没有方法体,实现类必须实现。抽象类中,子类要么完成重写父类的抽象方法,要么自己定义未抽象类。