Gorilla带您学java之抽象及模板设计模式

抽象

什么是抽象呢,抽象就是一个不具体的描述不清,但又提炼了大部分共同特性的这么一个令人难以描述的事物。
在java中呢就是要运用abstract关键字
比如说可以定义一个抽象类动物,其中有一个抽象方法吃。

abstract class Animal {
    public Animal() {
    }
    // 声明抽象方法吃
    public abstract void eat();
}

那么要这么实现这个抽象吃呢。就需要继承一个类然后重写吃方法。

class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("恰鱼");
    }
}

然后就可以在main方法中实例化对象并调用eat方法。

public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
    }

这就是一个简单的抽象的栗子。

总的来说需要注意五个方面
1.抽象方法没有实现部分
2.抽象方法必须在抽象类中才能声明
3.抽象类中可以没有抽象方法
4.抽象类不能直接创建对象,可以使用多态的形式创建对象
5.继承抽象类的子类必须实现抽象类中的抽象方法

abstract关键字与哪些关键字不能共存
final 修饰方法不能被重写
private 子类不能访问,抽象方法没有意义
static 修饰抽象方法,就可以直接使用类名调用,但是抽象方法没有实现部分

下面来说说一个利用了抽象类的一个设计模式

模板设计模式

当你的程序大部分代码都相同 只有少部分需要修改时 ,可以使用模板设计模式,利用抽象类。
什么意思呢。就是将少部分需要修改的抽象出来,然后实现即可。

// 定义一个抽象类模板计算运行一个方法需要花费多少时间(毫秒数)
abstract class HowManyTimes{
    // 模板
    public void calculationTimes() {
        long time1 = System.currentTimeMillis();
        // 调用抽象方法
        fun();
        long time2 = System.currentTimeMillis();
        System.out.println(time2 - time1);
    }
    // 定义一个抽象方法
    abstract public void fun();
}
// 定义一个H1类来继承抽象方法HowManyTimes
class H1 extends HowManyTimes{
    // 重写要计算时间的程序的抽象方法
    @Override
    public void fun() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i*j + " ");
            }
            System.out.println();
        }   
    }
}

然后在main方法中new一个对象就会在控制台打印一个九九乘法表及所需的时间。
上面就是一个简单的利用抽象来实现的模板设计模式。

记得给个♥(ˆ◡ˆԅ)

猜你喜欢

转载自blog.csdn.net/qq_37113621/article/details/82227008