我来自 c#,这很容易,而且是可能的。
我有这段代码:
public abstract class clsAbstractTable {
public abstract String TAG;
public abstract void init();
}
但是 Eclipse 告诉我我使用了非法修饰符。
我有这个类:
public class clsContactGroups extends clsAbstractTable {
}
我想要以这种方式定义的变量和方法,让 Eclipse 提示我,我有未实现的抽象 变量 和方法。
我需要如何定义我的抽象类,以便提示我实现抽象?
编辑 1
我将为不同的数据库表创建不同的类。每个类都应该有自己的 TABLENAME 变量,无一例外。每次我创建一个扩展抽象类的新类时,我都必须确保这个变量是静态的。
然后在抽象类中我将有一个方法,例如:init();
如果在这个 init() 方法中我调用了 TABLENAME,它应该从子类中获取值。
这样的事情也应该解决
String tablename=(clsAbstract)objItem.TABLENAME;
// where objItem can be any class that extended clsAbstract;
编辑 2
我想要在每个类中定义一个常量(静态),它的名称以抽象形式定义。
- 我抽象地定义了变量 TABLENAME,但没有给出任何值。
- 我创建了一个 clsContactGroups,我应该被提示执行 TABLENAME,这是获取一些数据的地方。例如:TABLENAME=“联系人组”;
- 我创建了第二个类 clsContacts,系统会提示我执行 TABLENAME,这是获取一些数据的地方。例如:TABLENAME=“联系人”;
ETC…
原文由 Pentium10 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为您的困惑在于 C# 属性与字段/变量。在 C# 中,您不能定义抽象字段,即使在抽象类中也是如此。但是,您可以定义抽象属性,因为它们是有效的方法(例如编译为
get_TAG()
和set_TAG(...)
)。正如一些人所提醒的那样,你永远不应该在你的类中有公共字段/变量,即使在 C# 中也是如此。几个答案暗示了我会推荐什么,但没有说清楚。您应该使用 getTAG() 将您的想法作为 JavaBean 属性转换为 Java。然后你的子类将不得不实现这个(我也写了一个带有表类的项目)。
所以你可以像这样定义一个抽象类……
然后,在任何具体的子类中,您需要定义一个静态最终变量(常量)并从
getTag()
返回它,如下所示:_编辑_:
您不能覆盖继承的字段(在 C# 或 Java 中)。您也不能覆盖静态成员,无论它们是字段还是方法。所以这也是最好的解决方案。我更改了上面的 init 方法示例以显示如何使用它 - 再次将 getXXX 方法视为一个属性。