Java中的抽象变量?

我来自c#,这很容易而且可能。

我有以下代码:

public abstract class clsAbstractTable {

public abstract String TAG;

public abstract void init();

}

但是Eclipse告诉我我使用了非法的修饰符。

我有这个课:

public class clsContactGroups extends clsAbstractTable {

}

我想要以这样的方式定义变量和方法,以使Eclipse ,我没有实现抽象 和方法。

我需要如何定义抽象类,以便提示我实现抽象?

我将为不同的数据库表创建不同的类。每个类都应具有自己的TABLENAME变量,也不例外。每次创建扩展抽象类的新类时,都必须确保此变量是静态的。

然后在抽象类中,我将有一个方法,例如:init();

如果在此init()方法中我调用TABLENAME,则它应该从子类中获取值。

这样的事情也应该解决

String tablename=(clsAbstract)objItem.TABLENAME;

// where objItem can be any class that extended clsAbstract;

我想要在每个类中定义的常量(静态),其名称以抽象形式定义。

  • 我抽象地定义了变量TABLENAME,但是没有给出任何值。
  • 我创建了一个clsContactGroups,应该提示我实现TABLENAME,这是在其中获取一些数据的地方。例如:TABLENAME =“ contactgroups”;
  • 我创建第二个类clsContacts,应提示我实现TABLENAME,这是在其中获取一些数据的地方。例如:TABLENAME =“ contacts”;

    等等…

回答:

我认为您的困惑在于C#属性与字段/变量。在C#中,即使在抽象类中,也无法定义抽象字段。但是,您可以定义抽象属性,因为它们是有效的方法(例如,编译为get_TAG()set_TAG(...))。

正如某些人提醒的那样,即使在C#中,您也不应该在类中包含公共字段/变量。有几个答案暗示了我的建议,但并不清楚。您应该使用getTAG()将您的想法转换为JavaBean属性的Java。然后,您的子类将必须实现这一点(我还编写了一个具有表类的项目来执行此操作)。

因此,您可以像这样定义一个抽象类…

public abstract class AbstractTable {

public abstract String getTag();

public abstract void init();

...

}

然后,在任何具体的子类中,您都需要定义一个静态最终变量(常量),并从中返回它getTag(),如下所示:

public class SalesTable extends AbstractTable {

private static final String TABLE_NAME = "Sales";

public String getTag() {

return TABLE_NAME;

}

public void init() {

...

String tableName = getTag();

...

}

}

编辑

您不能覆盖继承的字段(在C#或Java中)。您也不能覆盖静态成员,无论它们是字段还是方法。因此,这也是最佳解决方案。我更改了上面的init方法示例,以显示该方法的用法-

再次将getXXX方法视为属性。

以上是 Java中的抽象变量? 的全部内容, 来源链接: utcz.com/qa/428107.html

回到顶部