- 什么是抽象类
- 如果自下而上在类的继承层次结构中上移,位于上层的类更具有通用性,甚至可能更加的抽象。从某种角度来看,祖先更加通用,但是人们只将它作为派生类和其他基类,而不作为想要使用的特定实例。我们考虑一下对Teacher类层次的扩展。例如:一名老师是一个学生,一名学生也是一个人。下面我们将Person 和Student添加到类的层次结构中。如上图所示为三者之间我的关系。
- package deno06; public class demo6 { public static void main(String[] args) { } } abstract class Person{ private String name; public Person(String name){ this.name=name; } public void fly() { System.out.println("这个人在天上飞"); } }
- 如上图所示Person类为父类,当父类的某些方法,需要声明,但又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。即为父类方法的不确定性。所谓的抽象方法也就是没有实现得方法,所谓的没有实现的方法也就是指没有方法体。一般情况下,抽象类会被继承,有子类来实现抽象方法。
- 抽象类的关键字解析
- abstract:修饰类:会使这个类成为一个抽象类,这个类不能生成对象实例,但是可以做为对象变量声明的类型,也就是编译时类型,抽象类就相当于类的半成品,需要子类来继承,由子类来实现抽象方法。
- abstract:修饰方法,会使这个方法变成抽象方法,也就是只有声明定义而没有实现,实现部分以“;”代替。需要子类继承覆盖。
- 抽象类的注意事项
- 1.抽象类不能被实例化。
- 2.抽象类不一定包含abstract方法。也就是说,抽象类可以没有abstract方法。
- 3.一旦类包含abstract方法,则这个类必须声明为abstract
- 4.abstract只能修饰类和方法,不能修饰属性和其他的。
- 5.抽象类可以有任意成员【抽象类本质还是类】,比如:非抽象方法,构造器,静态属性等等。
- 6.抽象方法不能有主体,既不能实现
- 7.如果一个类继承了抽象类,则它必须实现抽象类的所有方法,除非他自己也声明为abstract类
- 8.抽象方法不能使用private,final,和static修饰,因为这些关键词和重写是相违背的。
案例
package demo02;
import org.omg.CORBA.PUBLIC_MEMBER;
public class demo8 {
public static void main(String[] args) {
//抽象类不能被实例化
//new pp();
}
}
//抽象类不一定要包含 abstract 方法,也就是说,抽象类可以没有 abstract 方法
//还可以有实现的方法
abstract class pp{
public void hi(){
System.out.println("hi");
}
}
//一旦包含了 abstart 方法,那么这个类必须声明为 abstart
abstract class B{
public abstract void hi();
}
//abstart 只能修饰类和方法,不能修饰属性和其他的。
class O{
//public abstract int n1 = 1;属性不能被修饰
}