Java设计模式之模板设计模式
原创
©著作权归作者所有:来自51CTO博客作者mb60aa6722a0e94的原创作品,请联系作者获取转载授权,否则将追究法律责任
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后面的类型更改即可,其他代码无需改动,因此提高了代码的可维护性和可扩展性。
该方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。