我以前从未在 Java 中遇到过此类问题。所有这些代码和完整的项目都可以在我的 GitHub 上找到。我有一个Snowflake
具有类层次结构的类:
Snowflake extends SolidRectangle extends Movable extends Drawable extends Object
我班级中的以下两个代码部分在Snowflake
我的游戏中产生了不同的图形结果:
//In Snowflake class
public void decay()
{
age++;
color = randomSnowflakeColor();
if(age == 5)
{
super.remove();
Snowflake.Mempool.returnSnowflake(this);
}
}
和
//In Snowflake class
public void decay()
{
age++;
color = randomSnowflakeColor();
if(age == 5)
{
this.remove();
}
public void remove()
{
super.remove();
Snowflake.Mempool.returnSnowflake(this);
}
既不SolidRectangle
也不Movable
覆盖该remove
方法,但Drawable
使用以下实现:
//In Drawable class
public void remove()
{
game.remove(this);
}
并GameContent game
具有以下实现:
//In GameContent class
public synchronized void remove(Drawable drawable)
{
removeQueue.add(drawable);
}
我将为您省去详细信息removeQueue
,只要说这正是您所期望的就足够了。
至于Snowflake.Mempool
,我知道手动内存管理通常不是 Java 程序员的一部分,但我发现创建和垃圾收集这些雪花的开销太大,所以我想我会重用旧的雪花来避免这种开销。请不要为此分心。我的问题是关于前两个代码块如何可能不同,当它们看起来功能相同时。
那么,前两个代码块如何产生不同的结果呢?