目录
1.抽象类的介绍
2. 抽象类语法
3.模板设计模式
1.抽象类的介绍
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
上述概念可能过于抽象,其实我们可以代入场景去理解。
当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法, 这个方法就是抽象方法,用abstract来修饰该类就是抽象类。
2. 抽象类语法
1.
抽象类不能直接实例化对象
否则会报错
2.抽象类也是类,内部可以包含普通方法和属性,甚至构造方法,但abstract只修饰类和方法,不修饰属性和其他。
3. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
4.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
abstract class Rect {
private double length;
private double width;
Rect(double length, double width){
this.length = length;
this.width = width;
}
}
5.抽象方法不能是 private 的
6.抽象方法不能被final和static修饰,因为抽象方法要被子类重写
7.
抽象类必须被继承,并且继承后子类要重写父类中的抽象方法
,否则子类也是抽象类,必须要使用
abstract
修 饰
8.抽象方法不能有主体
3.模板设计模式
(1)有多个类,完成不同的任务,A任务计算1到25的和,B任务计算1乘到10000000
(2))要求统计得到各自完成任务的时间
public abstract class Text01 {
public abstract void job();//抽象方法
public void calculateTime() {//实现方法,调用 job 方法
//得到开始的时间
long start = System.currentTimeMillis();
job(); //动态绑定机制
//得的结束的时间
long end = System.currentTimeMillis();
System.out.println("任务执行时间 " + (end - start));
}
public static void main(String[] args) {
A a=new A();
a.calculateTime();
B b=new B();
b.calculateTime();
}
}
class A extends Text01{
@Override
public void job() {
long num = 1;
for (long i = 1; i <= 25; i++) {
num *= i;
}
System.out.println("A工作完成"+num);
}
}
class B extends Text01{
@Override
public void job() {
long num = 0;
for (long i = 1; i <= 10000000; i++) {
num += i;
}
System.out.println("B工作完成"+num);
}
}
运行结果:
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞