引出
比如,animal有多个子类,都会继承eat()方法,子类需要继承该方法,但各自的实现不同,即父类实现了eat()方法,没有意义,此时就可以将父类和该方法声明为abstract
抽象方法就是没有实现的方法,不能有方法体
抽象类会被继承,由子类实现
abstract class Animal{
private String name;
public Animal(String name) {
this.name = name;
}
public abstract void eat() ;
}
注意
1.不能被实例化,即不能创建对象
2.可以没有抽象方法,可以有实现方法
3.有一个抽象方法,类必须声明为抽象类
4.不能修饰属性
5.抽象类可以有任意成员(抽象类本质还是类)
6.如果一个类继承了抽象类,则必须实现抽象类的所有抽象方法,除非自己也声明为abstract类
7.抽象方法不能被private final static修饰,子类不能重写,实现
实践:模板模式
编写一个项目,统计得到各自完成任务的时间
父类Template
abstract public class Template {
//抽象方法
public abstract void job();
//实现方法,调用job()
public void calculateTime(){
//得到开始的时间
long start = System.currentTimeMillis();
//抽象方法
job();//动态绑定
//得到结束的时间
long end = System.currentTimeMillis();
System.out.println("开始时间"+start+"\n结束时间"+end);
System.out.println("执行时间"+(end - start));
}
}
子类A,B
class A extends Template{
//实现父类的抽象方法 job()
public void job(){
long num = 0;
for (int i = 0; i <=10000; i++) {
num+=i;
}
}
}
class B extends Template{
//实现父类的抽象方法 job()
public void job(){
long num = 0;
for (int i = 1; i < 10000; i++) {
num*=i;
}
}
}
测试类
public class TemplateTest {
public static void main(String[] args) {
A a = new A();
a.calculateTime();
B b = new B();
b.calculateTime();
}
}