在Java设计模式中,模板方法是很常用的一种模式,它的宗旨就是把子类相同的部分提取到父类,不同的部分通过声明抽象方法在父类中调用,在子类中实现。
但是如果在抽象方法中访问实例变量,可能会有一个让你意外的陷阱:
public class Test {
public static void main(String[] args) {
new ChildClass();
}
}
abstract class SuperClass {
private int i = 0;
SuperClass() {
foo();
}
abstract void foo();
}
class ChildClass extends SuperClass {
private int i = 5;
void foo() {
System.out.println("i = " + i);
}
}
父类中的foo()方法调用的确实是子类中实现的foo方法。
在子类中,我们期望变量i象我们初始化的那样,值为5,但是实际上它的值不是子类中赋予的5,而是父类中赋予的0。
实际上子类的初始化过程如下:
1)初始化父类的实例变量
2)调用父类的构造器
3)调用子类的foo()方法
4)初始化子类的实例变量
5)调用子类的构造器
因此,如果我们在父类的构造器中调用抽象函数,而该函数又要访问实例变量的值的时候,就要特别注意到这种情况。
分享到:
相关推荐
(2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也...
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例 C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例
JAVA类的方法调用和变量 一、类的分类: 1、普通类 2、抽象类(含有抽象方法的类) 3、静态类(不需要实例化,就可以使用的类) 二、方法的分类: 1、私有方法(只有类的内部才可以访问的方法) 2、保护方法(只有...
抽象类与抽象方法由abstract修饰 abstract的使用注意 抽象方法没有方法体 抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能...
“抽象类允许(但不... 在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象类呢?当然是为了想某个方法能够被OVERRIDE,以实现多态。
java例之实例7 接口和抽象函数(java实例系列)
大家都知道抽象类无法实例化,就无法创建对象。所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...
c#中抽象类和接口。 相同点: (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 ...(9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
主要介绍了JAVA抽象类和抽象方法(abstract),结合实例形式分析了java抽象类及抽象方法相关定义、使用技巧与操作注意事项,需要的朋友可以参考下
使用抽象方法实现多态使用抽象方法实现多态
只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束, 并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod(); 实现...
抽象工厂模式Demo实例,如有想了解抽象工厂模式,可参考原博文:https://blog.csdn.net/lzb348110175/article/details/89597958,该Demo配套原博文使用
通过抽象类中的抽象方法实现简单工厂模式。
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次...抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 7.接口中的方法默认都是 public,abstract 类型的。
通过抽象工厂搜提供的接口,可以创建产品的家族,利用这个接口书写代码,我们的代码将从实际工厂解耦,以便在不同上下文中实现各种各样的工厂,制造出各种不同的产品。这是与博客《抽象工厂模式--GOF的23个之一》...
抽象类和抽象方法.pdf
经典描述抽象工厂整个动作过程!! 适合学习设计方法人员参考
窗体应用程序。一个抽象类几何形状包含抽象求面积方法,三个继承类圆、矩形、三角形实现抽象类求面积方法。
这是一个抽象工厂的经典实例,内附源码,数据库,用法说明