Masz problemy z kompilowaniem podklas klasy bazowej, którą zdefiniowałem, która ma jedną metodę, a każda z podklas implementuje abstrakcyjną metodę bazową, ale javac mówi, że nie są one jednak dokładnie zdefiniowane w podklasie.Nie można skompilować klasy podrzędnej implementującej metodę abstrakcyjną z klasy podstawowej
DbModel.java (klasa bazowa)
package com.manodestra.db;
import java.sql.ResultSet;
import java.sql.SQLException;
public abstract class DbModel<T extends DbModel> extends Model {
abstract T newInstance(ResultSet rs) throws SQLException;
}
DbModel obejmuje model, który ma tylko ogólny sposób toString.
MenuPermissions.java (klasa sub)
package com.manodestra.csa.db.model.configNew;
import com.manodestra.db.DbModel;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
public class MenuPermissions extends DbModel<MenuPermissions> {
private final String menuId;
private final String userLevel;
public MenuPermissions(
String menuId,
String userLevel
) {
this.menuId = menuId;
this.userLevel = userLevel;
}
public String getMenuId() {
return this.menuId;
}
public String getUserLevel() {
return this.userLevel;
}
public MenuPermissions newInstance(ResultSet rs) throws SQLException {
return new MenuPermissions(
rs.getString("menu_id"),
rs.getString("user_level")
);
}
}
Kompilacja Błąd
[javac] Compiling 487 source files to C:\Media\Code\manodestra_java\bin
[javac] C:\Media\Code\manodestra_java\src\com\manodestra\csa\db\model\configNew\MenuPermissions.java:10:
error: MenuPermissions is not abstract
and does not override abstract method newInstance(ResultSet) in DbModel
[javac] public class MenuPermissions extends DbModel<MenuPermissions> {
[javac] ^
Każdy zobaczyć, co problem jest tutaj? Zgaduję, że przeoczam coś naprawdę prostego.
Więcej informacji na temat wymagań:
buduję ramy podmiot, który generuje obiekty modelu z danej bazy danych. Powyższe MenuPermissions jest jednym z takich obiektów modelu (generowanych automatycznie przez klasę, którą napisałem o nazwie GenerateModel). Chcę, aby każdy model miał metodę, która pozwoli mi uzyskać nową instancję każdego typu obiektu na podstawie zestawu wyników, który zapełni obiekt odpowiednio i zwróci go. Najlepiej byłoby, gdyby była to metoda statyczna, ale próbowałem jej teraz jako konkretnej metody, ponieważ potrzebuję wymusić jej istnienie w każdej podklasie DbModel. Mam nadzieję, że ma to sens.
Twoja abstrakcyjna metoda ma dostęp do pakietu, nie wiem, czy było to zamierzone – peter
@Laser Yep. .. Opublikuj jako odpowiedź. Kciuki w górę. – Mordechai
Poziom dostępu można rozszerzyć, gdy nadpisujesz: [Ideone] (http://ideone.com/fIWznf) –