Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java super

Super Java


Neste tutorial, aprenderemos sobre a palavra-chave super em Java com a ajuda de exemplos.

O super palavra-chave em Java é usada em subclasses para acessar membros da superclasse (atributos, construtores e métodos).

Antes de aprendermos sobre o super palavra-chave, certifique-se de saber sobre herança Java.

Usos de superpalavra-chave

  1. Para chamar métodos da superclasse que é substituída na subclasse.
  2. Para acessar atributos (campos) da superclasse se a superclasse e a subclasse tiverem atributos com o mesmo nome.
  3. Para chamar explicitamente a superclasse no-arg (padrão) ou construtor parametrizado do construtor da subclasse.

Vamos entender cada um desses usos.

1. Acesse os métodos substituídos da superclasse


Se métodos com o mesmo nome forem definidos na superclasse e na subclasse, o método na subclasse substituirá o método na superclasse. Isso é chamado de substituição de método.

Exemplo 1:substituição de método

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){
    display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Saída
I am a dog

Neste exemplo, fazendo um objeto dog1 de Cão classe, podemos chamar seu método printMessage() que então executa o display() declaração.

Desde display() é definido em ambas as classes, o método da subclasse Dog sobrescreve o método da superclasse Animal . Portanto, o display() da subclasse é chamado.



E se o método substituído da superclasse tiver que ser chamado?

Usamos super.display() se o método substituído display() da superclasse Animal precisa ser chamado.

Exemplo 2:super para chamar o método da superclasse

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){

    // this calls overriding method
    display();

    // this calls overridden method
    super.display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Saída
I am a dog
I am an animal

Aqui, como funciona o programa acima.



2. Atributos de acesso da superclasse


A superclasse e a subclasse podem ter atributos com o mesmo nome. Usamos o super palavra-chave para acessar o atributo da superclasse.

Exemplo 3:Acessar atributo de superclasse

class Animal {
  protected String type="animal";
}

class Dog extends Animal {
  public String type="mammal";

  public void printType() {
    System.out.println("I am a " + type);
    System.out.println("I am an " + super.type);
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printType();
  }
}

Saída :
I am a mammal
I am an animal

Neste exemplo, definimos o mesmo campo de instância type tanto na superclasse Animal e a subclasse Cão .

Em seguida, criamos um objeto dog1 do Cão classe. Em seguida, o printType() método é chamado usando este objeto.

Dentro do printType() função,



Portanto, System.out.println("I am a " + type); imprime Sou um mamífero . E, System.out.println("I am an " + super.type); imprime Eu sou um animal .

3. Uso de super() para acessar o construtor da superclasse


Como sabemos, quando um objeto de uma classe é criado, seu construtor padrão é chamado automaticamente.

Para chamar explicitamente o construtor da superclasse do construtor da subclasse, usamos super() . É uma forma especial do super palavra-chave.

super() pode ser usado apenas dentro do construtor da subclasse e deve ser a primeira instrução.

Exemplo 4:uso de super()

class Animal {

  // default or no-arg constructor of class Animal
  Animal() {
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // default or no-arg constructor of class Dog
  Dog() {

    // calling default constructor of the superclass
    super();

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Saída
I am an animal
I am a dog

Aqui, quando um objeto dog1 de Cão classe é criada, ela chama automaticamente o construtor padrão ou sem argumentos dessa classe.

Dentro do construtor da subclasse, o super() A instrução chama o construtor da superclasse e executa as instruções dentro dela. Assim, obtemos a saída I am an animal .



O fluxo do programa então retorna ao construtor da subclasse e executa as instruções restantes. Assim, Eu sou um cachorro será impresso.

No entanto, usando super() não é obrigatório. Mesmo que super() não é usado no construtor da subclasse, o compilador chama implicitamente o construtor padrão da superclasse.

Então, por que usar código redundante se o compilador invoca automaticamente super()?

É necessário se o construtor parametrizado (um construtor que recebe argumentos) da superclasse deve ser chamada a partir do construtor da subclasse.

O super() parametrizado deve ser sempre a primeira instrução no corpo do construtor da subclasse, caso contrário, obteremos um erro de compilação.

Exemplo 5:chamar construtor parametrizado usando super()

class Animal {

  // default or no-arg constructor
  Animal() {
    System.out.println("I am an animal");
  }

  // parameterized constructor
  Animal(String type) {
    System.out.println("Type: "+type);
  }
}

class Dog extends Animal {

  // default constructor
  Dog() {

    // calling parameterized constructor of the superclass
    super("Animal");

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Saída
Type: Animal
I am a dog

O compilador pode chamar automaticamente o construtor no-arg. No entanto, ele não pode chamar construtores parametrizados.

Se um construtor parametrizado tiver que ser chamado, precisamos defini-lo explicitamente no construtor da subclasse.



Observe que no exemplo acima, chamamos explicitamente o construtor parametrizado super("Animal") . O compilador não chama o construtor padrão da superclasse neste caso.

Java

  1. Operadores Java
  2. Comentários Java
  3. Java para cada loop
  4. Strings Java
  5. Interface Java
  6. Classe anônima Java
  7. Java try-with-resources
  8. Anotações Java
  9. Asserções Java
  10. Vetor Java