abstract关键字
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
使用abstract修饰的抽象类不能够被实例化。
使用abstract修饰的抽象方法不能有方法体。只有方法的声明,没有方法体。
包含抽象方法的类必须是抽象类。
抽象类中是包含构造器的,因为子类对象实例化时会加载构造器,需要直接或间接的调用父类的构造器。
抽象类中可以没有抽象方法,抽象方法所在的类一定是抽象类。
抽象方法的功能是确定的,通过方法声明即可确定,只是不知道如何实现,体现为没有方法体。
子类必须重写父类中的所有抽象方法之后,方可实例化,否则,此子类仍然是一个抽象类。
abstract不能与哪些关键字公用?
private,因为私有方法不能被重写。
static,static可以通过类名调用方法,而抽象方法只有声明没有方法体,不能调用只能重写实现。同理抽象方法只能存在于抽象类,也是不让通过对象调用,抽象类不可以实例化。
除此之外还有final关键字,final方法不能被重写,final修饰的类不能有子类。
abstract不能修饰哪些结构?
属性、构造器、代码块等。
public abstract class Person{
public abstract void eat();
}
模板方法设计模式
当功能内部一部分实现是确定的,另一部分是不确定的,这时可以把不确定的部分暴露出去,让子类去实现。
换句话说,在软件开发过程中实现一个算法时,整体步骤很固定,通用,这些步骤已经在父类中写好了,但是某些部分容易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。
public abstract class Template{
sout("begin");
code();
sout("end");
}
public void spendTime extends Template{
@override
public void code(){
for(int i=0;i<10000;i++){
sout("1000")
}
}
}