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