目录
抽象类及抽象方法
abstract修饰类:抽象类。此类不能实例化,即不能通过new来造对象。
问题:造对象是new出来的,但是这里不能造对象了,是不是就说明抽象类的构造方法就没用了呢?
答案:当然有用。因为抽象类的子类继承了它,就会用到它的构造器,用于子类实例化时调用实现相关操作。
abstract修饰方法:抽象方法。方法没有方法体,只有方法声明。
子类继承抽象类中的方法,要想让子类实例化,则可通过 ① 重写抽象类中方法;② 将该类变为抽象类。
总结:
① abstract不能用来修饰:属性、构造器等结构
② abstract不能用来修饰私有方法、静态方法、final修饰方法、final修饰的类
抽象类的匿名内部类:
public class AbstractTest {
// 抽象类Animal的匿名类
Animal animal = new Animal() {
@Override
public void eat() {
// TODO Auto-generated method stub
}
};
}
abstract class Animal{
public abstract void eat();
}
模板方法设计模式(TemplateMethod)
解决的问题:当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
即:在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,让不同的子类实现。
abstract class TemplateTest {
public static void main(String[] args) {
Template template = new SubTemplate();
template.spendTime();
}
}
abstract class Template {
public void spendTime() {
// 计算某段代码执行花费的时间
long start = System.currentTimeMillis();
code(); // 不确定部分
long end = System.currentTimeMillis();
System.out.println("花费时间为:" + (end - start));
}
public abstract void code();
}
class SubTemplate extends Template {
@Override
public void code() {
// TODO Auto-generated method stub
for(int i =0;i<100;++i);
}
}