我可以有一个空的Java类吗?

我可以有一个空的Java类吗?,java,class,abstract,Java,Class,Abstract,我正在创建一个基于网格的游戏 我需要在网格中设置一组随机位置的障碍物。 我创建了一个抽象类ALifeForm,它保存网格中每个项目的通用方法。显然,抽象类不能初始化,所以我打算创建一个新类AObstacle,它将扩展ALifeForm 唯一的问题是,我的AObstacle课程不是专门的。它需要的所有方法都在ALifeForm中 我可以要一节空课吗? 这是糟糕的编程实践吗?如果是这样,我可以实现什么呢?当然 class AObstacle { } (加上您正在使用的任何继承模型)没有任何东西可以

我正在创建一个基于网格的游戏

我需要在网格中设置一组随机位置的障碍物。 我创建了一个抽象类
ALifeForm
,它保存网格中每个项目的通用方法。显然,抽象类不能初始化,所以我打算创建一个新类
AObstacle
,它将扩展
ALifeForm

唯一的问题是,我的
AObstacle
课程不是专门的。它需要的所有方法都在
ALifeForm

我可以要一节空课吗? 这是糟糕的编程实践吗?如果是这样,我可以实现什么呢?

当然

class AObstacle { }
(加上您正在使用的任何继承模型)没有任何东西可以阻止您这样做

记住,类并不是你定义的东西。一种类型是。类只是用来描述类型的语言/语法结构。如果所描述的类型除了继承模型之外没有任何属性或操作,那么就没有其他可添加的内容


虽然你增加了一件事。你给它起了个名字。听起来不太像,但是用具体的名称定义语义概念(特别是在静态类型环境中)非常重要。您的类型现在具有与系统中其他类型不同的标识。如果以后添加了内容,那么就可以在不进行重构和破坏性更改的情况下添加它们。

要做到这一点,您不需要有抽象类和扩展它的类,也不需要有空类(也可以有空类)

第一种方式:

您只需要实现两个类:包含需要使用的方法和变量的类,以及包含第一个类实例的第二个CALS:

public class A{
  public void firstMethod(){
    //do your stuff here
  }
....
}

public class B{
  public static void main(String[] args) {
   A a=new A(); //instantiate your class here 
   a.firstMethod();// then just use its methods
  }
}
因为如果你实现了一个扩展抽象类的类,它应该实现它的所有方法

第二种方式:

  • 或者,如果您想让第二节课变得专业化,您可以:

你的第一个类不应该是抽象的,第二个类可以扩展它并使用它的所有方法,还有它的特定方法“我可以有一个空的Java类吗?”-是的。你尝试时发生了什么?那么为什么
ALifeForm
abstract
,因为它的子类不提供任何东西?您是否考虑过将类从抽象类更改为具体类?如果一个子类可以是一个精确的副本,但有另一个名称,那么可能是超类应该是实例化的,而不是空的<>代码>抽象>代码>类,可以考虑<代码>接口< /> >,尽管从抽象类继承的空类可能是代码气味,有时,它们是描述要建模的结构的最佳方式。从问题中对场景的描述来看,这似乎是一个带有一点警告的情况:障碍真的是生命形式吗?也许
ALifeForm
应该改名为
AGridItem
或者类似的东西,包括生物和无生命的障碍物。@biziclop:非常正确。我们对正在建模的域的了解还不够确定。这可能违反了作为设计考虑的Liskov替换,与语言是否支持空类完全无关。虽然这在技术上是正确的,但并不总是好的做法。@biziclop是正确的,但这只是一种方法,我真的不知道这一切的目的是什么!!