I am coming from c# where this was easy, and possible.
I have this code:
public abstract class clsAbstractTable {
public abstract String TAG;
public abstract void init();
}
but Eclipse tells me I use illegal modifier.
I have this class:
public class clsContactGroups extends clsAbstractTable {
}
I want the variable and method defined in such way, that Eclipse to prompt me, I have unimplemented abstract variables and methods.
How do I need to define my abstract class so I should be prompted to implement the abstracts?
EDIT 1
I will create different classes for different db tables. Each class should have it's own TABLENAME variable, no exception. I have to make sure this variable is static each time when I create a new class that extends the abstract class.
Then in the abstract class I will have a method eg: init();
If in this init() method I call TABLENAME, it should take the value from the sub-class.
something like this should also work out
String tablename=(clsAbstract)objItem.TABLENAME;
// where objItem can be any class that extended clsAbstract;
EDIT 2
I want a constant(static) defined in each class having it's name defined in abstract.
Define a constructor in the abstract class which sets the field so that the concrete implementations are per the specification required to call/override the constructor.
E.g.
public abstract class AbstractTable {
protected String name;
public AbstractTable(String name) {
this.name = name;
}
}
When you extend AbstractTable
, the class won't compile until you add a constructor which calls super("somename")
.
public class ConcreteTable extends AbstractTable {
private static final String NAME = "concreteTable";
public ConcreteTable() {
super(NAME);
}
}
This way the implementors are required to set name
. This way you can also do (null)checks in the constructor of the abstract class to make it more robust. E.g:
public AbstractTable(String name) {
if (name == null) throw new NullPointerException("Name may not be null");
this.name = name;
}