什么是抽象类?
抽象类,抽象类是什么呢?顾名思义,抽象类就是抽象的类,抽象是相对于具体而言的,一般而言,具体类有直接对应的对象,而抽象类没有,它表达的是抽象概念,一般是具体类的比较上层的父类。
比如说,狗是具体对象,而动物则是抽象概念,樱桃是具体对象,而水果则是抽象概念,正方形是具体对象,而图形则是抽象概念。下面我们通过一些例子来说明Java中的抽象类。
抽象方法和抽象类
抽象方法和抽象类都使用abstract这个关键字来声明,语法如下所示:
抽象类
public abstract class Employee
{
public abstract void work()
{
System.out.println("work");
}
}
抽象类特点
- 抽象类不能被实例化,因为调用抽象方法没有意义
- 抽象类可以包含抽象方法和抽象访问器
- 抽象方法一定在抽象类中
- 抽象类中的方法要被使用,必须由子类继承复写所有的抽象方法后,建立子类对象调用,如果子类子类只复写了部分方法,那么该子类还是一个抽象类
常见错误
- 实例化抽象类
public static void main(String [] args)
{
/* 以下是不允许的,会引发错误 */
Student stu = new Student();
}
编译将会报错
小程序举例
需求:获取一段程序的运行时间
原理:获取程序和结束的时间并相减即可。
那么怎么获取时间了?
在java中提供了一个方法
currentTimtMillis()
具体实现功能代码
abstract class GetTime
{
public final void getTime()
{
long start=System.currentTimeMillis();
runCode();
long end=System.currentTimeMillis();
System.out.print("毫秒:"+(end-start));
}
public abstract void runCode();
}
//继承GetTime类 重写runCode
class subTime extends GetTime
{
public void runCode()
{
for(int i=0;i<1000;i++)
{
System.out.print(i);
}
}
}
抽象类中的方法要被使用,必须由子类继承复写所有的抽象方法后,建立子类对象调用
上图单独写一个runCode方法是因为每次要求的运行的代码是不一样的,这样子类继承之后,重写一下就OK,方便复用
public static void main(String[] args)
{
subTime time=new subTime();
time.getTime();
}
这样就成功的调用了抽象类中的非抽象方法
总结:
抽象类和一般类没有太大的不同
该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西
这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体
通过抽象方法来表示。
抽象类比一般类 多了个抽象函数,就是在类中可以定义抽象方法,也可以不定义。不让该类建立对象
抽象类不可以被实例化。