У меня есть два класса
public class PrepaidPackage {
private String name;
private String serviceClassID;
private boolean isTranferable;
public boolean isTranferable() {
return isTranferable;
}
public void setTranferable(boolean isTranferable) {
this.isTranferable = isTranferable;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getServiceClassID() {
return serviceClassID;
}
public void setServiceClassID(String serviceClassID) {
this.serviceClassID = serviceClassID;
}
}
другой класс -
public class PostpaidPackage {
private String name;
private boolean isTranferable;
public boolean isTranferable() {
return isTranferable;
}
public void setTranferable(boolean isTranferable) {
this.isTranferable = isTranferable;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Я хочу создать фабричный класс, который на основе типа пакета создает соответствующий класс.Но если вы посмотрите выше, они не имеют один и тот же тип методов и переменных.Так что, пожалуйста, расскажите, как создать интерфейс или абстрактный класс для вышеуказанного класса?
Теперь фабрика вернет имя класса Package.Могу ли я вызывать методы, которых нет в другом классе.
Обновления
Пожалуйста, предложите, если я разобью свой пакет на два класса, например
public abstract class MyPackage {
public abstract PackageSpec getSpec();
public abstract PackagePrepaidDetails getDetail();
}
Теперь общие атрибуты будут в PackageSpec и предоплаченные вещи в packageDetails.
Это своего рода абстрактный шаблон фабрики.
public class PrepaidPackage extends MyPackage{
PackageSpec spec;
public Spec getSpec() {
spec = new PackageSpec();
spec.setTranferable(true)
spec.setName("abc");
return spec;
}
public PackagePrepaidDetails getDetails() {
details = new PackagePrepaidDetails ();
details.setServiceClassID(123)
return details;
}
}
public class PostpaidPackage extends MyPackage{
PackageSpec spec;
public Spec getSpec() {
spec = new PackageSpec();
spec.setTranferable(true)
spec.setName("abc");
return spec;
}
}