在谈类、抽象类以及接口之前,我们需要首先明白几个概念:
1、子类与父类
2、类中方法的继承及接口中方法的实现
3、子类对父类方法的重写
下面简单谈谈接口与抽象类以及普通的类的联系及区别
我们知道一个普通的类里边的方法必须有方法的实现方式,但在抽象类中方法可以有具体的实现方式也可以没有,而在接口中则是不能出现方法的实现方式。这是此三者的最明显区别,除此之外,他们三者还有几点区别,也是在我们写程序以及理解其特点时需要注意的:
1、接口里面没有提供任何具体实现,可以说是一个极度抽象的类,他允许你创建一个能够被向上转型为不止一种基类型的类,以此来实现多重继承。
2、接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是
3、接口中没有属性,而且所有的方法都是抽象的,而抽象类可以有属性,而且可以有抽象方法,也可以有实现的方法。但两者都不能被实例化。
4、使用的时候,一个类可以继承多个接口,但只能继承一个抽象类。
5、抽象类, 再抽象也还属于类的范畴, 它能包含一个类能包含的任何东西; 而接口已经不属于类了, 它是类的抽象.
6、如果事先知道某种东西会成为基础类,那么第一个选择就是把它变成一个接口。 只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
还有就是类与类之间是继承关系,且不存在多继承;
接口与接口之间也是继承关系,但存在多继承;
接口与类之间是实现关系,接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现。
记住:接口的成员都是public的,接口是不可以创建对象的,因为抽象方法需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实列化,否则子类是一个抽象类。
接口也是class文件。所以也可以用接口名直接方法接口中的变量。
抽象类中除了抽象方法,也可以定义非抽象方法,子类必须复写所有的抽象方法。否则子类仍是一个抽象类,不能够实列化,当然也失去了意义。
以上是本人的拙见,希望对你们有所帮助。 |