抽象类的顶级理解

目录

1.抽象类的介绍

2. 抽象类语法

3.模板设计模式


1.抽象类的介绍

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

上述概念可能过于抽象,其实我们可以代入场景去理解。

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法, 这个方法就是抽象方法,用abstract来修饰该类就是抽象类。


2. 抽象类语法

1. 抽象类不能直接实例化对象
抽象类的顶级理解_第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

抽象类的顶级理解_第2张图片

 6.抽象方法不能被finalstatic修饰,因为抽象方法要被子类重写

抽象类的顶级理解_第3张图片

7. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法 ,否则子类也是抽象类,必须要使用 abstract 修 饰
抽象类的顶级理解_第4张图片

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);
    }
}

运行结果:

抽象类的顶级理解_第5张图片

抽象类的顶级理解_第6张图片


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

抽象类的顶级理解_第7张图片

你可能感兴趣的:(java,经验分享,其他)