herança e construtores. (Simples)

Galéra estou com 2 dúvidas básicas. Bem básicas mesmo. Espero que vocês me ajudem.
Como de costume desde já agradeço.

A primeira ao que se refere herança, mais exatamente na parte de sobrescrição…

Qual a diferença entre sobrescrever e sobreposição, ou não existe nenhuma diferença?

A outra dúvida básica é no que se refere a construtores.

Tenho um construtor quero saber toda a resenha sobre Super() e This(), ou seja, é possível ter os 2 no mesmo contrutor e se puder qual a ordem que devem aparecer?

Penso que é possível fazer isto:

Construtor(){ super(4); this(); }

e penso que não é possível fazer isto:

Construtor(){ this(); super(4); }

1 - Basicamente:
Sobrescrever: Você usa um método com a mesma assinatura. Exemplo:

class Pessoa {

    public String andar() {
        return "Pessoa.andar";
    }

} 

class JohnDoe extends Pessoa {

    public String andar() {
        return "JohnDoe.andar";
    }

}

// ...

Pessoa pessoa = new Pessoa();
System.out.println(pessoa.andar()); // Retorna "Pessoa.andar"

Pessoa pessoa = new JohnDoe();
System.out.println(pessoa.andar()); // Retorna "JohnDoe.andar"
// ...
Sobrepor: mesmo nome de método, mas com parâmetros diferentes.
class Pessoa {

    public String andar() {
        return "Pessoa.andar";
    }

    public String andar(String nomePessoa) {
        return nomePessoa + ".andar";
    }
    
} 

// ...

Pessoa pessoa = new Pessoa();
System.out.println(pessoa.andar()); // Retorna "Pessoa.andar"
System.out.println(pessoa.andar("Felipe")); // Retorna "Felipe.andar"
//...

2 - Construtores:

-> Você NÃO pode usar super() e this() no mesmo construtor;
-> super() e this() SEMPRE devem estar na primeira linha do construtor.

3 - Estes são somente alguns conceitos. Você pode ler a apostila da Caelum para saber mais sobre Java e OO: http://www.caelum.com.br/caelum/apostila/caelum-java-objetos-fj11.pdf

a) super tem de ser o primeiro comando no seu construtor.
b) A menos que você queira fazer um “loop infinito” (que na prática sai com “Stack Overflow”), não use “this” para acessar o próprio construtor, mas um outro. Por exemplo:

class A {
    public A() {}
}

class B extends A {
    public B () { this(); /* não faça isso porque vai entrar em loop */ }
    public B () { this (5); /* isto está OK, vai chamar B (int x) */ }
    public B (int x) { ... }
}

Sim…lembre-se o seguinte…em uma mesma classe quando escrevemos o mesmo método(assinatura igual) e alteramos a sua lista de parâmetros, estamos sobrepondo ou sobrecarregando.
Mas quando herdamos um método de uma classe e o reescrevemos na classe filha(não se pode alterar nem a assinatura e nem os parametros) estamos sobreescrevendo.

Obs. sobrecarga não exige herança, sobrescrita sim.

Sempre que vc sobrescrever um construtor deve utilizar a cláusula super em primeiro lugar.
Ex.

public Exemplo(String x, String y, String z){
     super(x, y);
     this.z = z;
}

neste caso as Strings x e y são os parâmetros da superclasse e a String z é uma particularidade da classe Exemplo.

Espero que tenha te ajudado…flw

Bem a minha dúvida sobre sobreposição e sobrecarga é a seguinte pra ser mais exato. Algumas questões falam de sobreposição e sobrecarga. Mas em algum momento elas também falam de sobrescrever.

Pensei que sobrescrever e sobrepor fossem a mesma coisa.
Ex: Um método sobrescreveu outro, ou então, um metodo sobrepos o outro.

Vou por um exemplo para ficar mais claro:

[code]public class MyClass{
public static void main(String[] agrs){
//algo…
}
void ametho(int i){
}

    [b]private int amethod(float i){ return 0; }[/b]

}
class MySubclass extends MyClass{
void amethod(int i) throws RuntimeException{}
}[/code]

Alternativas:
A) protected void amethod(int i) throws Exception{}
B) public int amethod(int i) {return 0;}
C) void amethod(int i) throws RuntimeException{}
D) private int amethod (float i) {return 0;}

Explicação: Para uma sobrecarga válida, a lista de argumentos do método deve er diferente, o tipo de retorno pode ou não ser diferente. Portanto, a alternativa D é o modo válido de sobrecarga do metodo amethod da classe MyClass. O modificador de acesso não imprta em sobrecargas. A alternativa C é um modo válido de sobrescrever o método amethod, desde que o tipo de retorno e argumento sejam compativeis. O modificador de acesso é permitido de ser igual ou mais publico em sobreposições, portando isto também não é um problema. De qualquer forma, não é permitido lançar novas exceções checadas, lançar exceções não checadas é nenhum problema em sobreposições.

sobrescrever é quase sempre descrito como sobrescrita mesmo.(alterar o conteúdo de um método da superclasse na classe filha sem alterar sua assinatura ou parâmetros).
a confusão está no caso da sobreposição, que é a sobrecarga(criar 2 ou mais métodos com a mesma assinatura, porém lista de parâmetros diferentes dentro da mesma classe).

obs…eu fiz uma correção no meu post anterior…por favor releia.

flw

Ou seja, Sobrepor = Sobrecarregar.
Correto?

Correto.

correto

Ok, agradeço a todos sobre a força que vcs me deram e tenho certeza que quando for postar meu resultado que se deus quizer vai ser positivo o Guj e todos vocês que colaboram vai estar na minha homenagem.

this - Tem que estar na primeira linha!
super - Tem q estar na primeira linha!

Então vc tem que escolher qual vai usar, this ou super :wink:

Se tentar usar dois, como vai respeitar a regra da 1º linha ?

Tem outra, se esse construtor é sem parametro, o this vai ter que chamar um construtor com paramentos

public class A extends B{

	A (){
		this(1); // Não pode existir o super nesse bloco!
	}
	
	A (int x){
		super(); // opcional + sempre vai existir
	}
} 

Se vc num colocar o super(), em tempo de compilação isso vai ser colocado!
Toda classe tem que ter um construtor chamando o construtor “Pai”! O que vc estender ou object

(y)