Best practice for a class field having different values ​​in subclasses

I have some abstract class, in one of its methods I use a string field that should be specific to subclasses. I wonder what practical practice is to implement this? through the field and setting the field value in subclass constructors? through a static field and a change in value in each subclass?

What would you suggest?

+3
source share
4 answers

Subclasses must indicate a value. The superclass must define its interface. Use pattern template pattern template .

Example:

public abstract class SuperClass {
  public abstract String getSomeValue();

  public void method() {
     String s = getSomeValue();
  }
}


public class SubClass extends SuperClass {
  private static final String CONSTANT = "";

  public String getSomeValue() {
    return CONSTANT;
  }
}

Another option is to set it in the constructor:

public abstract class SuperClass {
  private String value;

  public SuperClass(String value) {
    this.value = value;
  }
}


public class SubClass extends SuperClass {
  private static final String CONSTANT = "";

  public SubClass() {
    super(CONSTANT);
  }
}
+7
source

, .

- , , "" :

abstract class Super {
    final String blah;
    protected Super(String blah) {
        if (blah == null) throw new NullPointerException();
        this.blah = blah;
    }
    public String getBlah(){ return blah; }
}
class Sub extends Super {
    public Sub() { super("Sub"); }
}
+8
abstract class Base{
        String field ;
        public Base(String field){
            this.field = field;
        }
    }
class Sub extends Base{
    public Sub(String field){
        super(field);
    }
}
+1
source

Best practice is to define an abstract get method in an abstract superclass / interface.

Thus, each subclass can implement its own way of obtaining a property.

abstract class SuperClass {
  abstract String getBlah();
}

class SubClass extends SuperClass{
  String getBlah(){
    return "blubb";
  }
}
0
source

Source: https://habr.com/ru/post/1748988/


All Articles