java抽象类
抽象类
Nov 18, 2017 | Java基础
文章目录
抽象方法和抽象类
为什么要抽象类
抽象类和接口
原文链接
抽象是相对于具体而言的,具体类有直接对应的对象,而抽象类没有,一般而言是比较上层的夫类。比如说,动物是抽象,而狗是具体对象;水果是抽象,苹果是具体对象;图形是抽象,圆是具体对象。
抽象方法和抽象类
有一个图形类Shape,它有一个方法draw()。Shape其实就是一个抽象概念,它的draw方法并不知道如何实现,只有子类才知道。这种只有子类才知道如何实现的方法,一般定义为抽象方法。
抽象方法是相对于具体方法而言的,具体方法有实现代码,而抽象方法只有声明,没有实现。用abstract这个关键字声明:
1
2
3
4
public abstract class Shape {
// ... 其他代码
public abstract void draw();
}
有抽象方法的类必须声明为抽象类,不过抽象类可以没有抽象方法。
抽象类不能创建对象。(比如 Shape shape = new Shape() )。
一个类在继承抽象类后,必须实现抽象类中定义的所有抽象方法。除非它自己也声明为抽象类。
1
2
3
4
5
6
7
public class Circle extends Shape {
//...其他代码
@Override
public void draw() {
// ....
}
}
可以这样来创建对象:
1
2
Shape shape = new Circle();
shape.draw();//调用圆的方法。
为什么要抽象类
引用抽象方法和抽象类,是java提供的一种语法工具,引导使用者正确的使用它们,减少误用。
无论是写程序,还是平时做任何别的事情的时候,每个人都可能会犯错,减少错误不能只依赖人的优秀素质,还需要一些机制,使得一个普通人都容易把事情做对,而难以把事情做错。抽象类就是Java提供的这样一种机制。
抽象类和接口
抽象类和接口是配合而非替代关系,它们经常一起使用,接口声明能力,抽象类提供默认实现,实现全部或部分方法,一个接口经常有一个对应的抽象类。
比如说,在Java类库中,有:
Collection接口和对应的AbstractCollection抽象类
List接口和对应的AbstractList抽象类
Map接口和对应的AbstractMap抽象类
抽象类与接口的区别:
1 :接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。
2 :接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。
3 :接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来 完成属于抽象类的初始化操作。
4 :接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
5 :一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承 不足。
---------------------
作者:lzz0729
来源:CSDN
原文:https://blog.csdn.net/qq_27391133/article/details/80350795
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号