super em Java
Use super dentro do construtor filho para o construtor pai rodar primeiro. Mantenha Truck extends Car. Em Truck(), chame super(); e depois imprima truck. Em Car(), imprima car. Compile Yard.java e rode java Yard. A tela deve mostrar car, depois truck. Uma segunda demo passa uma marca com super("car") para Car(String mark). Deixe sobrescrever um metodo para a pagina seguinte — esta licao e sobre a ordem dos construtores com super.
Chame o construtor pai primeiro
A pagina de heranca deixou um Truck vazio usar horn de Car. Esta pagina acrescenta construtores. Abra Yard.java. Mantenha o nome da classe publica Yard. Apague demos de caminho sobrando, arquivos so de horn se confundirem os construtores, escritores Store e qualquer Scanner de teclado. O programa nao deve esperar digitacao. Nenhuma linha import e necessaria.
Declare o pai com um construtor sem argumentos que imprime car:
class Car {
Car() {
System.out.println("car");
}
}
Declare o filho com extends Car. Dentro de Truck(), chame super(); como primeira instrucao, depois imprima truck:
super();
System.out.println("truck");
Dentro de Yard.main, construa um truck:
Truck t = new Truck();
Construir o truck entra em Truck(). Essa chamada comeca com super(), que roda Car(). Depois que o pai termina, a impressao do filho roda.
class Car {
Car() {
System.out.println("car");
}
}
class Truck extends Car {
Truck() {
super();
System.out.println("truck");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
}
}
Na pasta que guarda Yard.java, rode javac Yard.java. Quando parenteses, chaves e ponto e virgula batem, javac nao escreve linha propria. Depois rode java Yard — nao java Yard.java. Tire o sufixo .java do comando de execucao. Mantenha uma classe publica no arquivo para o nome coincidir com Yard. Os tipos auxiliares Car e Truck ficam sem public nesta forma iniciante.
A tela mostra car, depois truck. Percorra a execucao uma vez. Java comeca em Yard.main. new Truck() entra em Truck(). A primeira instrucao e super();, entao Car() roda e imprime car. O controle volta a Truck(), que imprime truck. A linha do pai aparece antes da linha do filho porque super() rodou primeiro.
Diga a ordem em voz alta enquanto olha a tela: construtor pai, depois impressao do filho. Essa ordem falada e a que super() forca no construtor filho. Se as linhas chegarem na sequencia errada, abra de novo o arquivo didatico e confira que super(); ainda e a primeira instrucao dentro de Truck() antes de qualquer println.
Se voce imprimir truck antes de super() num experimento posterior em que o construtor pai precisa de argumentos, javac pode recusar — super deve ser a primeira instrucao quando voce o escreve. Nesta primeira demo o pai nao precisa de argumentos, e o arquivo didatico mantem super(); primeiro de proposito para a ordem ficar clara. Se voce ver so beep de uma demo antiga de horn, mude para o arquivo didatico de construtor e rode java Yard de novo.
Nao reescreva horn em Truck nesta pagina. Sobrescrever um metodo e a proxima licao. Hoje o construtor filho fala com o pai via super, depois imprime a propria palavra. Mantenha a palavra car no lado do pai e a palavra truck no lado do filho para cada linha dizer qual construtor terminou.
Passe um valor ao pai com super
Um segundo programa mantem extends. O construtor pai agora recebe um String mark e imprime essa marca. O filho chama super("car") e depois imprime truck.
class Car {
Car(String mark) {
System.out.println(mark);
}
}
class Truck extends Car {
Truck() {
super("car");
System.out.println("truck");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
}
}
Compile com javac Yard.java, depois rode java Yard. A tela de novo mostra car, depois truck. Desta vez car e o argumento que voce passou por super("car"), nao uma impressao fixa dentro de um Car() sem argumentos. O filho escolheu a string da marca; o construtor pai a imprimiu. Depois disso, o filho imprimiu truck.
Leia a assinatura do construtor pai mais uma vez: Car(String mark). A string entre aspas dentro de super("car") e essa mark. Nao mude mais nada no arquivo para esta checagem — mantenha extends Car, mantenha a impressao truck do filho e mantenha new Truck() em main. A tela ainda termina com truck sob car porque a impressao do filho so roda depois que super("car") retorna.
Se voce omitir super("car") enquanto Car so tem Car(String mark), javac recusa, porque o pai ja nao tem um construtor silencioso sem argumentos para chamar por voce. Escrever a chamada super(...) correspondente e como o filho inicia o pai com os valores de que precisa. Mantenha super como primeira instrucao em Truck(). Se javac reclamar de construtor padrao ausente em Car, olhe primeiro o construtor filho e confirme que a linha super("car") esta presente e ainda e a primeira.
Comparado com extends simples na pagina do horn
Na pagina de heranca, um Truck vazio chamou horn sem escrever construtores. Nesta pagina, os construtores rodam em ordem atraves de super. Mantenha as demos de horn como historia se ainda estiverem por perto; rode o arquivo didatico de super com java Yard para a tela mostrar car depois truck.
A pagina do horn mostrou que extends compartilha um metodo. Esta pagina mostra que extends tambem compartilha um caminho de construcao: o filho inicia o pai atraves de super, depois continua com a propria impressao. As duas licoes mantem Truck extends Car. So o corpo de Truck muda — de chaves vazias com uma chamada posterior a horn, para um construtor que comeca com super.
super(), super("car") e a ordem dos construtores sao os novos tokens. Voce ainda precisa de extends. Voce ainda nao precisa sobrescrever um metodo. Se uma chamada horn sobrando ainda estiver em main, remova-a nestas demos para a tela mostrar so as impressoes dos construtores.
O que isto deixa para override
Esta pagina roda construtores pai com super. A pagina seguinte mostra override, onde o filho escreve a propria versao de um metodo que o pai ja tem. Fique com as chamadas super de construtor aqui. Ainda nao substitua horn em Truck como requisito nestas demos.
Quando mais tarde voce sobrescrever um metodo, ainda vai chamar com frequencia um construtor pai com super primeiro. Trate esta pagina como a metade de construtor dessa historia. Termine as duas demos Yard ate car depois truck parecer automatico antes de abrir a licao de override.
Antes do override
Voce pode chamar super(); depois imprimir truck e ver car primeiro. Voce pode chamar super("car") quando o pai recebe uma mark e ainda ver car, depois truck. Compile Yard.java e rode java Yard para cada demo que voce mantiver, uma de cada vez. O construtor pai terminou antes da impressao do filho. A pagina seguinte e override, onde o filho substitui o corpo de um metodo.
Mantenha a demo super() sem argumentos para uma ordem clara. Mantenha a demo super("car") para uma passagem clara de argumento. Mantenha override de metodo fora desta pagina. Esses tres habitos sao o posto de controle antes de seguir. Quando car aparece acima de truck depois de new Truck(), super fez o trabalho desta licao e voce esta pronto para o proximo topico sobre override.
Uma ultima passagem pela pasta: um Yard publico, dois tipos auxiliares, sem espera de teclado, sem restos de path, sem forcar reescrita de horn. Rode javac Yard.java e java Yard mais uma vez na demo que voce mantiver aberta. Se a tela ainda imprimir car depois truck, a ordem dos construtores esta solida e o curso pode ir para override na pagina seguinte.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo