Tive a mesma dúvida que você Rodrigo, mas pelo que eu entendi a chamada super e this só serve para se chamar a si próprio ou seja, super.x de mim mesmo é 1. Já new A().super.x é um novo objeto, chamar new A().super.x. Seria algo como chamar super.x de si próprio, mas em outro objeto.
Sendo assim este tipo de chamada no Java nunca é permitida.
Alguém sabe me dizer se estou certo na minha compreensão?
E quanto a chamada de atributos ou métodos não-static diretamente usando super ou this para dentro de métodos static eu testei da seguinte forma:
class B {
int x = 1;
}
class A extends B {
static int x = 2;
public static void main(String[] args) {
new A().doIt();
}
public void doIt() {
System.out.println(new A().super.x);
}
}
E também não funcionou. Não precisaria de new A() já que super.x é super de A.
Porém acessando desta forma:
public void doIt() {
System.out.println(super.x);
}
Funciona normalmente...
E quando o método é static realmente não funciona acessar como foi feito acima por que a variável membro em B não é static, porém se acessá-la como está no exercício mesmo que a variável seja static não compila como testei no código abaixo:
class B {
static int x = 1;
}
class A extends B {
static int x = 2;
public static void main(String[] args) {
new A().doIt();
System.out.println("Acesso de main: " + new A().super.x);
}
public void doIt() {
System.out.println(super.x);
}
}
Me levando a entender que nunca é permitido acessar super ou this desta forma new A().this ou new A().super.