通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性,
例如:
abstract class A {
public abstract void doSomething();
}
class B extends A {
public void doSomething() {
System.out.println("do B");
}
}
class C extends A {
public void doSomething() {
System.out.println("do C");
}
}
public class Test {
public static void main(Stringp[] args) {
A a1 = new B();
A a2 = new C();
B b = new B();
C c = new C();
doSomething(a1); //这里
doSomething(a2); //这里
doSomething(b); //这里,如果下面的方法不是用抽象类作参数,比如用C c做参数,这里会有什么问题?
doSomething(c); //这里
}
public static void doSomething(A a) {//这里,用抽象类,为什么,自己思考
a.doSomething();
}
}
//这个例子只是抽象类的最基本的设计模式,和接口差不多
在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;
通过从这个抽象体派生,也可扩展此模块的行为功能。为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
抽象类比较像普通类和接口的结合,因为抽象类可以像普通类那样在类中实现方法,也可以像接口一样,只声明,不实现。下面的一个抽象类的实例:
public abstract class TravelTool{ //抽象类需在类的关键字class前加上关键字abstract。
//抽象方法没有方法体,需在方法返回值前加上关键字abstract,并以分号结尾。
public abstract String drive(int i);
}
抽象类可以有抽象方法,如果它的子类是抽象类,那么子类不必实现抽象类的抽象方法;如果子类不是抽象类,那么子类必须实现抽象类的抽象方法。需要注意的是,不能实例化抽象类对象。若子类为非抽象类那么子类可以实例化对象。
如果你还是不太明白抽象类。你可以上秒秒学了解下,上面说的比较形象。
主要就是为了继承。
真正使用的时候,抽象类用的并不是很多,用的最多的是借口,但是换句话说,借口也是一种抽象类。
子类继承抽象类后必须实现父类中的抽象方法。
如分页 分页父类BasicPage 父类中有个addParameter的方法。如果你建一个***Page的话它继承了BasicPage ,那么他必须加上addParameter的方法,否则报错。