Java设计模式之模板设计模式-CSDN博客

174 阅读2分钟
public abstract class TestAbstract {
    private int cnt;

    public TestAbstract() {
        super();
    }
    public TestAbstract(int cnt) {
        super();
        setCnt(cnt);
    }

    public int getCnt() {
        return cnt;
    }
    public void setCnt(int cnt) {
        this.cnt = cnt;
    }
    //自定义抽象方法
    public abstract void show();
    public static void main(String[] args) {
        //TestAbstract ta = new TestAbstract();
        //System.out.println("ta.cnt = " + ta.cnt); //0
    }

}
public class TestSubAbstract extends TestAbstract {

    public static void main(String[] args) {

        //子类的引用指向子类自己的对象
        TestSubAbstract tsa = new TestSubAbstract();
        //子类的引用只能调用子类自己的show()方法
        tsa.show();

        System.out.println("---------------------------");
        //父类的引用指向子类的对象,形成了多态
        TestAbstract ta = new TestSubAbstract();
        //在编译阶段调用父类的show()方法,在运行阶段调用子类重写以后的方法
        ta.show();
    }

    @Override
    public void show() {
        System.out.println("抽象类");
    }

}

抽象类与模板设计模式
1、抽象方法
抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用abstract关键字修饰
语法格式:
访问控制符 abstract 返回值类型 方法名称(形参列表);
如:
public abstract void cry();

2、 抽象类
抽象类就是指使用abstract关键字修饰的类,抽象类体现在不能实例化对象。

3、注意事项
a)抽象类中可以有成员变量、成员方法以及构造方法;
b)抽象类中可以有抽象方法也可以没有;
c)拥有抽象方法的类必须是抽象类,因此通常情况下认为拥有抽象方法并且有abstract关键字修饰的类才认为是真正的抽象类;

4、实际意义
抽象类的实际意义不在于实例化对象而在于被继承,若一个类继承自抽象类则必须要重写抽象方法,否则该类也得变成抽象类。
因此,抽象类对子类具有强制性和规范性,叫做模板设计模式

经验分享
在以后的开发中推荐使用父类引用指向子类对象的形式,因为父类引用直接调用的方法一定是父类拥有的方法,当需要更换指向的子类对象时,只需要将new后面的类型更改即可,其他代码无需改动,因此提高了代码的可维护性和可扩展性。
该方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。