我来自c#,这很容易而且可能。
我有以下代码:
public abstract class clsAbstractTable {
public abstract String TAG;
public abstract void init();
}
但是Eclipse告诉我我使用了非法的修饰符。
我有这个课:
public class clsContactGroups extends clsAbstractTable {
}
我想要以这样的方式定义变量和方法,以使Eclipse 提示我 ,我没有实现抽象 变量 和方法。
我需要如何定义抽象类,以便提示我实现html" target="_blank">抽象?
编辑1
我将为不同的数据库表创建不同的类。每个类都应具有自己的TABLENAME变量,也不例外。每次创建扩展抽象类的新类时,都必须确保此变量是静态的。
然后在抽象类中,我将有一个方法,例如:init();
如果在此init()方法中我调用TABLENAME,则它应该从子类中获取值。
这样的事情也应该解决
String tablename=(clsAbstract)objItem.TABLENAME;
// where objItem can be any class that extended clsAbstract;
编辑2
我想要在每个类中定义的常量(静态),其名称以抽象形式定义。
我认为您的困惑在于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 开发人员,对Object Orientation概念有很好的了解( 或者也许我这样认为 )。现在我正在学习设计模式(从头开始设计模式)。我一直在阅读有关OOPS概念抽象的文章,以简要地理解它,而阅读更多有关它的内容,使我比以前更加困惑。 据我了解,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而无需担心内部细节。但是我不明白 抽象类如何适应这种抽象概念,其
问题内容: 让抽象类定义实例变量是否是一种好习惯? 然后,子类ExternalJavaScript.class会自动获取源变量,但我认为,如果所有子类本身都定义了源而不是继承,则读取代码会更容易。 你有什么建议? /亚当 问题答案: 我本以为这样的话会更好,因为您要添加一个变量,所以为什么不限制访问并使它更整洁呢?您的吸气器/装夹器应该按照罐子上的说明去做。 再次提到这个问题,您在阅读时是否会费心
问题内容: 我想编写一个抽象方法,但编译器始终显示此错误: 抽象方法不能有主体 我有这样的方法: 怎么了 问题答案: 抽象方法意味着没有默认实现,并且实现类将提供详细信息。 本质上,您将拥有 因此,它与错误状态完全相同:您的抽象方法不能具有主体。 在Oracle网站上有完整的教程,网址为:http : //download.oracle.com/javase/tutorial/java/IandI
问题内容: 我对Java中的抽象有点困惑。 我检查了许多页面,指出抽象是数据隐藏(隐藏实现)。 我对抽象的理解是“部分实现”。只需在抽象类/接口中定义所需的内容,然后扩展/实现它们并添加您自己的功能即可。 我不明白这是怎么隐藏数据的?实现类/接口后,您将可以访问代码,并将根据需要对其进行修改。 我已经检查了许多问题,关于此的文章,但对此仍然感到困惑。 任何帮助表示赞赏。谢谢。 问题答案: 也许有一
假设我有一个叫做book的类,它是抽象的,有一个私有变量price,它的getter方法也是抽象的。 现在让我们假设我有一个旧的Book类,它继承了Book的所有属性,但也有一个与之相关联的年龄。另外,我希望这个类从它的父类重写getPrice方法。这就是我陷入困境的地方,因为price变量是私有的,而父类有一个抽象的getter方法。 谢谢。
Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为 抽象类。 在 Java 中抽象类的语法格式如下: 其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类