Java重载vs重写

嗨,我只是想确保我有正确的这些概念。 在java中重载意味着您​​可以使用具有不同数量的参数或不同数据类型的构造函数或方法。 即

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

这个方法怎么样? 它是否仍会被视为重载,因为它返回不同的数据类型?

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

第二个问题是:什么是重写java? 它与inheritance有关吗? 我们有以下内容:

 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; } } 

所以现在让我说我有以下内容

 Truck truck = new Truck(); 

如果我打电话

 truck.super.getPrice() 

这将从Vehicle类返回20,000的价格

如果我打电话

 truck.getPrice() 

这将返回卡车类的价格,14,000

我的知识对两个问题都是正确的吗?

你基本上是正确的。 重载在单个类中具有多个方法,其中方法具有相同的名称。 但是,返回值不会被视为方法签名的一部分。 因此,您不能通过仅更改返回值来重载方法。 您的示例中不能包含以下代码:

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

这将无法编译。

正如Rob所说,我相信你的意思是压倒一切 ,你就是这样。 注意覆盖,您无法更改返回类型。 从Java 5开始,您可以返回基类方法返回的派生类型。 在Java 5之前,它必须是相同的类型。 也就是说,在Java 5及更高版本之前,您无法执行以下操作:

 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 (); } } 

但是,即使在Java 5及更高版本中, 也无法执行以下操作:

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

最后,经常被忽略的重载和重写之间的一个重大区别是,在编译时决定重载,并在运行时决定重写。 当他们期望在运行时决定重载时,这会让很多人感到意外。

正确; 重载为同一方法提供了多个签名。

覆盖,我认为你的意思是“覆盖”是提供从基类型inheritance的方法的不同实现的行为,并且基本上是通过inheritance的多态性的点,即

 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) } } 

你所描述的是正确的。

有关更多说明,请参阅多态概念。 维基百科有一篇很好的文章

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

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