重载不是多态吗?

时间:2015-10-17 19:11:42

标签: java oop polymorphism

我从我们的导师和书籍中研究过polymorphism意味着有很多shapes,而在java中它是通过两种方式实现的。

  • overloading
  • overriding
oracle docs polymorphism中的

定义得非常好。但我不明白为什么他们没有定义多态性下的重载他们讨论过只覆盖?我想通过这种方式,许多形状重载也应该属于多态性。

我已经完成了所有问题,但我不清楚这些答案,因为每个人都没有任何参考地表达了他们的观点,每个人都有不同的观点,有些人说是的,其他人在没有正当理由的情况下说不。

Java The Complete reference 8th ed

我认为突出显示的部分(引自Java The Complete reference 8th ed)是overloading的例子。 那么大家怎么说重载对于ovrloading没什么好处,但是压倒一切?

that how polymorphism is not achieved by overloading?

2 个答案:

答案 0 :(得分:0)

“重载”是在同一类中具有方法的多个变体的术语。例如:

public class Foo
{
    public String doStuff()
    { return this.doStuff( "stuff" ) ; }

    public String doStuff( String sStuff )
    { return this.doStuff( sStuff, "things" ) ; }

    public String doStuff( String sStuff, String sWith )
    { return "Do " + sStuff + " with " + sWith + "." ; }
}

Foo类提供了doStuff()方法的三种变体:一种不带参数,一种带有一个参数,另一种带有两个参数。重载看起来很常见,这种方法的大多数变体实际上只是用一些默认值调用下一个更高复杂度的方法。

这允许您使用零个,一个或两个参数中的任何一个具有可预测的行为:

Foo foo = new Foo() ;
System.out.println( foo.doStuff() ) ;                    // "Do stuff with things."
System.out.println( foo.doStuff( "stuff" ) ) ;           // "Do stuff with things."
System.out.println( foo.doStuff( "more stuff" ) ) ;      // "Do more stuff with things."
System.out.println( foo.doStuff( "stuff", "things" ) ) ; // "Do stuff with things."
System.out.println( foo.doStuff( "things", "stuff" ) ) ; // "Do things with stuff."

相比之下,“覆盖”是多态的原则,其中后代类从超类中改变方法的行为。

public class Bar extends Foo
{
    @Override
    public String doStuff( String sStuff )
    { return this.doStuff( sStuff, "thingamabobs" ) ; }
}

答案 1 :(得分:0)

多态性是一个非常通用的术语,它可以在Java中以多种方式实现,并且可以由少数或许多组件组成。

您提供的链接将多态性列为Java中继承的一个方面。虽然overloading属于多态性概念,但overriding在通过Java继承实现多态性方面更为相关。