什么是抽象类


如果自下而上在类的继承层次结构中上移,位于上层的类更具有通用性,甚至可能更加的抽象。从某种角度来看,祖先更加通用,但是人们只将它作为派生类和其他基类,而不作为想要使用的特定实例。我们考虑一下对Teacher类层次的扩展。例如:一名老师是一个学生,一名学生也是一个人。下面我们将Person和Student添加到类的层次结构中。如上图所示为三者之间我的关系。

packagedeno06;publicclassdemo6{publicstaticvoidmain(String[]args){}}abstractclassPerson{privateStringname;publicPerson(Stringname){=name;}publicvoidfly(){("这个人在天上飞");}}

如上图所示Person类为父类,当父类的某些方法,需要声明,但又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。即为父类方法的不确定性。所谓的抽象方法也就是没有实现得方法,所谓的没有实现的方法也就是指没有方法体。一般情况下,抽象类会被继承,有子类来实现抽象方法。

抽象类的关键字解析

abstract:修饰类:会使这个类成为一个抽象类,这个类不能生成对象实例,但是可以做为对象变量声明的类型,也就是编译时类型,抽象类就相当于类的半成品,需要子类来继承,由子类来实现抽象方法。

abstract:修饰方法,会使这个方法变成抽象方法,也就是只有声明定义而没有实现,实现部分以“;”代替。需要子类继承覆盖。

抽象类的注意事项

1.抽象类不能被实例化。

2.抽象类不一定包含abstract方法。也就是说,抽象类可以没有abstract方法。

3.一旦类包含abstract方法,则这个类必须声明为abstract

4.abstract只能修饰类和方法,不能修饰属性和其他的。

5.抽象类可以有任意成员【抽象类本质还是类】,比如:非抽象方法,构造器,静态属性等等。

6.抽象方法不能有主体,既不能实现

7.如果一个类继承了抽象类,则它必须实现抽象类的所有方法,除非他自己也声明为abstract类

8.抽象方法不能使用private,final,和static修饰,因为这些关键词和重写是相违背的。

案例
packagedemo02;_MEMBER;publicclassdemo8{publicstaticvoidmain(String[]args){//抽象类不能被实例化//newpp();}}//抽象类不一定要包含abstract方法,也就是说,抽象类可以没有abstract方法//还可以有实现的方法abstractclasspp{publicvoidhi(){("hi");}}//一旦包含了abstart方法,那么这个类必须声明为abstartabstractclassB{publicabstractvoidhi();}//abstart只能修饰类和方法,不能修饰属性和其他的。classO{//publicabstractintn1=1;属性不能被修饰}