所以,我正在从 Head First Java 学习,在那里我读了 -
重载方法只是一个碰巧具有相同方法名称的不同方法,它与继承和多态无关。
然而,我有一本名为 Java - The Complete Reference 的着名书籍,由Herbert Schildt撰写,在那本书中,我读到:
方法重载是Java支持多态的方法之一。方法重载支持多态,因为它是Java实现“一个接口,多个方法”范例的一种方式。
哪一个是正确的?
答案 0 :(得分:4)
要在标题中回答您的问题,不,您不能使用方法重载来描述多态性。
方法重载是指一个类有两个或多个同名的方法,唯一的区别是它的参数。这是一个完全不同于多元主义的概念。
多态性是一种物体采取多种形式的能力。当父类引用用于引用子类对象时,会发生这种情况。
例如,如果我的任务是为动物园创建某种类型的应用程序,我想用类跟踪动物。我会制作一个名为“动物”的课程和每种动物的额外课程,“狮子”,“鹰”,“海豚”。在将动物类声明为子类之后,我可以使用多态的概念来创建“动物”类型的狮子,老鹰和海豚。
答案 1 :(得分:2)
方法重载可以被认为是描述多态的一种方式 在Java?
这些是两个不同的概念。
我认为你错误地理解了作者的意思。
我用粗体强调了重要的部分:
方法重载是Java支持多态的方法之一。 方法重载支持多态,因为它是一种方式 Java实现了“一个接口,多个方法”范例。
它只是意味着重载和多态不是不相容的。
例如,您可能有一个定义重载方法的接口:
public interface Doable{
void doX(String s);
void doX(Integer s)
}
假设MyDoable
实现它,MyChildDoable
是MyDoable
的子类。
当你写:
MyDoable myDoable = new MyChildDoable();
myDoable.doX("a")
编译器会将调用的方法绑定到void doX(String s);
(重载),但在运行时,将使用实例的方法(MyChildDoable
)(多态性强>)。
答案 2 :(得分:1)
多态性不是一种类型,存在不同类型的多态性。请参考这个精彩链接 - Java Polymorphism以便更好地理解它。
重载支持多态,多态行为调用基于传递的类型参数,它以临时方式发生。
答案 3 :(得分:0)
因此,存在编译时多态性和运行时多态性的想法。多态的想法意味着相同的接口但不同的实现。
方式"编译时间"多态性工作是通过函数重载,即你有相同的函数名,但具有不同的精度。我猜这是第二本第二本书所指的"通过方法重载支持的多态性"。但是,严格来说接口还包括arrity,这意味着方法重载可能不构成多态。
运行时多态性是给定对象的实际类型决定应该使用什么实现的地方。这是接口/基类和派生类进入画面的地方。这将是更准确的多态定义 - 至少从面向对象的角度来看。
答案 4 :(得分:0)
重写 - 这是关于多态的。
public class Base {
public void print() {
System.out.println("base");
}
}
public class Extend extends Base {
@Override
public void print() {
System.out.println("Extend");
}
}
让我们看一下输出
new Base().print();
将打印" Base"
new Extend().print();
将打印"延长"。
重载 - 这是关于具有不同参数的一个类中的方法重载:
public class ABC {
// method 1
void method(int a){
System.out.println("method 1");
}
// method 2
void method(int a, int b){
System.out.println("method 2");
}
}
让我们看一下输出
ABC abc = new ABC();
abc.method(5);
将调用方法(int)并打印"方法1"
abc.method(1,2)
将调用方法(int,int)并打印"方法2"
覆盖 - 这是运行时功能;
重载 - 这个编译时功能; 所有重载方法(带有一个名称)必须是相同的返回类型或无效。