É possível criar um novo modificador em Java, para então criar um método que seja acessível somente a classe e à subclasses?
Estava criando uma interface “controladorMovimento” que possui os métodos
default void updateControl(){
a();
d();
w();
s();
}
private void d(){
if(InputManager.getInstance().isPressed(KeyEvent.VK_D)){
onPressedD();
}
}
private void a(){
if(InputManager.getInstance().isPressed(KeyEvent.VK_A)){
onPressedA();
}
}
private void w(){
if(InputManager.getInstance().isPressed(KeyEvent.VK_W)){
onPressedW();
}
}
private void s(){
if(InputManager.getInstance().isPressed(KeyEvent.VK_S)){
onPressedS();
}
}
void onPressedA();
void onPressedW();
void onPressedS();
void onPressedD();
O que acontece agora é o seguinte:
Digamos que eu crie um objeto Entidade.
public class Entidade implements controladorMovimento {
@Override
public void onPressedA() {
}
@Override
public void onPressedW() {
}
@Override
public void onPressedS() {
}
@Override
public void onPressedD() {
}
}
e agora o objeto:
Entidade ent = new Entidade();
dessa forma é possível chamar os métodos onPressed diretamente no objeto.
ent.onPressedD();
ou seja, ele realizaria a operação sem passar pela verificação se a tecla foi ou não pressionada! Uma falha grave.
E eu não posso dar o Override nos métodos onPressed trocando o modificador de acesso para private!
Eu gostaria que somente o método updateControl pudesse ser chamado.
ent.updateControl();
Se alguém souber uma maneira de contornar esse problema eu ficaria muito feliz.
Basicamente minha dúvida se resume a: existe alguma maneira de alterar na subclasse o modificador de acesso de um método criado na superclasse? Neste caso, eu nem sequer estaria tentando aumentar a visibilidade, pelo contrário, queria reduzi-la.