Pergunta

Oi eu só quero ter certeza que tenho esses conceitos corretos. Sobrecarga em Java significa que você pode ter um construtor ou um método com um número diferente de argumentos ou tipos de dados diferentes. i

public void setValue(){
   this.value = 0;
}
public void setValue(int v){
   this.value = v;
}

Como sobre este método? Seria ainda ser considerada uma sobrecarga, uma vez que está retornando um tipo de dados diferente?

public int setValue(){
   return this.value;
}

A segunda questão é: o que está a substituir em java? Ele se relaciona com a herança. do Eu tenho o seguinte Vamos:

public class Vehicle{
  double basePrice = 20000;
  //constructor defined
  public double getPrice(){
     return basePrice;
   }
}

public class Truck extends Vehicle{
  double truckPrice = 14000;
  //constructor defined
  public double getPrice(){
     return truckPrice;
   }
}

Então, agora vamos dizer que eu tenho o seguinte

Truck truck = new Truck();

se eu chamar

truck.super.getPrice()

este retornaria o preço da classe de veículos, 20.000

se eu chamar

truck.getPrice()

este retornaria o preço na classe caminhão, 14.000

É meu conhecimento correto para ambas as perguntas?

Foi útil?

Solução

Você está basicamente correta. A sobrecarga é ter vários métodos em uma única classe, onde o método tem o mesmo nome. No entanto, o valor de retorno não é visto como parte da assinatura do método. Assim, você não pode sobrecarregar um método alterando apenas o valor de retorno. Você não pode ter o seguinte código, com seu exemplo:

public void setValue() {
   this.value = 0;
}

public int setValue() {
   return this.value;
}

Esta não será compilado.

Como Rob identificada, eu acredito que você quer dizer primordial , e você tem que corrigir. Nota com substituindo, você não pode mudar o tipo de retorno. A partir do Java 5, você pode retornar um tipo derivado do que o método da classe base devolvidos. Antes de Java 5, ele deve ser o mesmo tipo. Ou seja, você não pode fazer o abaixo até Java 5 e posterior:

public class AnimalNoise {}
public class Miaw extends AnimalNoise {}

public class Animal {
    public AnimalNoise makeNoise() {
        return new AnimalNoise();
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}

No entanto, mesmo em Java 5 e posterior, você não pode faça o seguinte:

public class Animal {
    public String makeNoise() {
        return "silence";
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}
public class Miaw {}

Finalmente, uma grande diferença entre a sobrecarga e substituindo que muitas vezes é esquecido é que a sobrecarga é decidido em tempo de compilação e primordial é decidido em tempo de execução. Isso chama muitas pessoas de surpresa quando eles esperam a sobrecarga de ser decidido em tempo de execução.

Outras dicas

correta; sobrecarga está fornecendo várias assinaturas para o mesmo método.

Substituir, que é o que eu acho que você quer dizer com "substituir" é o ato de fornecer uma implementação diferente de um método herdado de um tipo base, e é basicamente o ponto de polimorfismo por herança, i.

public class Bicycle implements Vehicle {
    public void drive() { ... }
}

public class Motorcycle extends Bicycle {
    public void drive() {
        // Do motorcycle-specific driving here, overriding Bicycle.drive()
        // (we can still call the base method if it's useful to us here)
    }
}

O que você descreveu é correta.

Para mais esclarecimentos vejam o conceito de polimorfismo. A Wikipedia tem um bom artigo

http://en.wikipedia.org/wiki/Polymorphism#Computing

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top