一、抽象
抽象方法:仅有声明而没有方法体的方法 。如:abstract void f();
而包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
PS 若从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。若不这样做,那么导出类也是抽象类,且编译器会强制用abstract关键字来限定这个类。
二、接口
创建一个接口,需要用interface关键字来替代class关键字。
接口中方法的访问权限都是public,可以显式地声明出来,不这么做默认也是public。不然方法在被继承的过程中,其访问权限就被降低了,这是java编译器所不允许的。
接口也可以包含域,但隐式地是static和final的,且自动是public的。
JAVA中使用接口的两个原因:
①为了能够向上转型为多个基类型(以及由此而带来的灵活性)
②防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口(与使用抽象类的原因相同)
PS 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口。
三、Java中的多重继承
如果要从一个非接口的类继承,那么只能从一个类去继承。其余的基元素都必须是接口。另外,可以继承多个接口,并可以向上转型为每个接口,因为每个接口都是一个独立类型。
通过继承,可以很容易地在接口中添加新的方法声明,还可以通过继承在新接口中组合多个接口,以此获得新的接口。
四、嵌套接口
接口可以嵌套在类或者其他接口中,且嵌套在其他接口中的接口自动为public,而不能声明为private。
PS 实现某个接口时,并不需要实现嵌套在其内部的任何接口。而且,private接口不能在定义它的类之外被实现。