(抽象)abstract:抽象的,定义框架不去实现,可以修饰类和方法
abstract修饰类:会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就相当于一个类的半成品,需要子类继承并覆盖其中的抽象方法,这时子类才又创建实例的能力,如果子类没有实现父类的抽象方法,那么子类也要为抽象类。
abstract修饰方法:会使这个方法变成抽象方法,也就是只有声明而没有实现,实现部分以";"代替,需要子类继承实现。抽象方法代表了某种标准,定义标准,定义功能,在子类中去实现功能(子类继承了父类并需要给出从父类继承的抽象方法的实现)。方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义为抽象。
注意:
有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。
接口(interface):
接口的定义:接口从本质上说是一种特殊的抽象类。
关键字interface。
在接口中,所有的方法为公开、抽象的方法:public abstract
在接口中,所有的属性都是公开、静态的常量:public static final
接口与接口之间可以多继承,用extends,多个之间用逗号隔开。
接口中没有构造方法,不能用“new 接口名”来实例化一个接口,但可以声明一个接口。
接口的实现:关键字implements
一个类实现一个接口必须实现接口中所有的方法,否则其为抽象类,并且在实现类中的方法要加上public(不能省略)。
类中的默认修饰符:default。
接口中的默认修饰符:public。
一个类除了继承另一个类外(只能继承一个类),还可以实现多个接口(接口之间用逗号分隔)。
接口的作用:
间接实现多继承:用接口来实现多继承并不会增加类关系的复杂度。因为接口不是类,与类不在一个层次上,是在类的基础上进行再次抽象。
接口可以抽象出次要类型,分出主、次关系类型,符合看世界的一般方法。
接口隔离,与封装性有关。一个对象都有多个方面,可以只展示其中几个方面,其他的都隐藏。因此可以看为“更高层次的封装”,把 一个大接口做成若干个小接口。
通过接口制定标准(最重要的作用)
接口:制定标准。
接口的调用者:使用标准。
接口的实现类:实现标准。
解耦合作用:把使用标准和实现标准分开,使得标准的制定者和实现者解除偶合关系,具有极强的可移植性
例:sun公司提供一套访问数据库的接口(标准),java程序员访问数据库时针对数据库接口编程。接口由各个数据库厂商负责实现。
接口编程的原则
尽量针对接口编程(能用接口就尽量用接口)
接口隔离原则(用若干个小接口取代一个大接口)
注意:
接口中没有构造器,也没有main方法
abstract class和interface的区别:
声明方法的存在而不去实现它的类叫虚拟类(abstract class).它用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract class的实例.但是可以声明一个abstract class变量,将其指向其具体子类的一个实例.不能有抽象构造函数或抽象静态方法.Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法. 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口.接口是一个更纯的抽象类.
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口,不能实现接口,不能继承类;抽象类可以实现(implements)接口,抽象类可继承实体类。