一、什么是类
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类的实质是一种引用数据类型,类似于short 、int(char)、long、float、double 等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
类的内部封装了属性和方法,用于操作自身的成员。类是对某种对象的定义,具有行为,它描述一个对象能够做什么以及做的方法,它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、属性、方法和事件。
类的构成包括成员属性和成员方法(数据成员和成员函数)。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“猫猫”可以“叫”,而“西瓜”则不能。
二、什么是接口
接口(软件类接口)是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。
三、接口和类的联系
Java里面由于一个抽象类不被允许继承多个类(多重继承),所以若要实现多个类的功能,可以通过实现多个接口来实现。亦即接口就是类和外界发生交互的操作,接口的主要目的是为不相关的类提供通用的处理服务。
Java接口和Java抽象代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP的面向对象编程,如果要提高程序的复用率、增加程序的可维护性和可扩展性,就必须是面向接口的编程、面向抽象的编程。正确地使用接口、抽象类这些抽象类型作为Java结构层次上的顶层。
四、接口和类的区别
本质上来说,抽象类和它的实现者是一种继承关系,也就是说,作为父类的抽象类和它的子类之间必须存在“Is a”的关系。但对于接口来说,不需要它的实现类和它之间存在概念上的一致性,实现类只是实现了接口的契约而已。
抽象类定义继承关系,能够保证实现的层次关系,避免代码重复,但过于复杂的继承关系会导致类膨胀。接口定义行为模型,能够更有效地分离行为与实现,为代码的维护和修改带来方便。
- 抽象类中可以有构造方法,接口中没有。
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量。
- 抽象类中可以包含静态方法,接口中不能包含静态方法。
- 抽象类中的抽象方法的访问类型可以是 public,protected ,但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只是public static final 类型,并且默认即为 public static final 类型。