抽象类
在引入抽象类的概念之前,我们可以试想一下生活当中的某些例子。比如我们在描述某个图形的时候,像三角形之类的图形我么可以直接具体的描述它们有几条边,几个角,这些描述都是合乎情理的。但是对于某些图形,我们并不能直接描述它们的具体边角情况,只能大概的描述一下这个似乎存在的图形,那么对于这种事物的描述,在Java当中就需要使用到抽象类。
在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。我们很容易理解这一点,在继承树当中,越是在上方的类就描述的越概括越抽象,而在这些类下方的类相对来说就越具体。同时,我们在学习了之前的多态机制可以了解到,在多态机制当中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化对象。
抽象类的语法格式:
public abstract class Test{
abstract void testAbstract();//定义抽象方法
}
其中,abstract是定义抽象类的关键字。
使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法为抽象方法,就父类来说,这个方法没有任何意义,除非它被子类继承而又被重写。同时,承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。
抽象类总结:
- 什么是抽象类?
对于抽象类的概念简单来说就是:类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。我们知道,从类到对象是实例化,那么从对象到类就是抽象。
-
抽象类和普通类一样,都属于引用数据类型。
-
抽象类是无法实例化的,无法创建对象,所以抽象类是用来被子类继承的。
-
final和abstract是对立的,不能联合使用。
-
抽象类可以有构造方法吗?
抽象类虽然无法实例化,无法创建对象,但是抽象类是有构造方法的,主要是供子类使用来初始化抽象类的成员。
- 抽象方法表示没有实现的方法,也即没有方法体的方法。
- 抽象类中不一定有抽象方法,含有抽象方法的类一定是抽象类。
- 若一个非抽象类继承了抽象类,则必须将抽象类当中的所有抽象方法实现。
接口
为什么要引入接口的概念呢?我们刚刚学习了抽象类的相关语法规则,其中有一点语法规则是这样说的,“若一个非抽象类继承了抽象类,则必须将抽象类当中的所有抽象方法实现”。我们可以设想这样的一种情况:父类A是一个抽象类,并且包含一个抽象方法function,现在有另外的三个类B、C、D继承了抽象类A,那么在类B、C、D当中必须都要实现抽象方法function,即便可能B、C、D当中存在某些类并不需要使用这个function方法,这样看来,程序当中就会导致有许多的冗余代码,面临这样问题,接口的概念就出现了。
接口简介
接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。说到底呢,接口的本质还是一个类。
接口的语法格式:
[修饰符列表] interface 接口名{
}
其中,定义一个接口使用的关键字是interface,一个类实现一个接口可以使用implements关键字。
继承父类A的子类B实现接口C的语法格式为:
[修饰符列表] class B extends A implements C{
}
注意:extends在前,implements在后。
接口总结:
- 接口实质上就是一个类,因此接口是一种引用数据类型。
- 接口是完全抽象的,或者我们也可以说接口是一种特殊的抽象类,而抽象类是半抽象的,抽象类当中还可以有非抽象方法。
- 接口当中只包含两部分内容,一部分是常量,另一部分是抽象方法。
- 接口中的所有元素都是public修饰的,都是公开的,即便不写public修饰符也默认是public的。
- 在接口中定义抽象方法时,public abstract可以省略。
- 接口中的方法都是抽象方法,因此接口中的方法都没有方法体。
- 当一个非抽象类实现接口的话,必须将接口当中的所有抽象方法全部实现(覆盖/重写)。
- 接口和接口之间可以实现多继承,一个类可以同时实现多个接口,这个机制是为了弥补Java中的类之间的单继承的。
- 接口和接口之间在进行强制类型转换的时候,即便没有继承关系,也可以强制转换,但是可能出现classCastException异常。
- 接口是完全抽象的,接口当中没有构造方法 。
看完本期博客我们需要思考的问题有:
1.Java语言当中凡是没有方法体的方法都是抽象方法吗?
2.抽象类可以实现接口吗?
Tips:解答如下:
1.这个说法显然是错误的,我们翻阅JDK源码可以发现,在Object类当中就有很多方法是没有方法体的,都是直接以 ; 结尾,这些方法的底层调用了C++写的动态链接库程序,并不是抽象方法。
2.抽象类当然可以实现接口,只是通常并不需要这样做,接口当中的方法可以由抽象类的子类来实现。
以上内容均为个人学习的一点心得,其中的知识点若有错误请留言提醒,若有侵权内容提醒马上删除。