繁体   English   中英

重载了多态的概念还是?

[英]Overloading a concept of polymorphism or?

Public class John {

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

现在可能我将如何调用这两种方法?

John j = new John();
j.setValueO();
j.setValue(10); 

如果我错了请纠正我。

  1. 函数重载了多态吗? 如果没有,这是在哪个OOP分支下进行的。
  2. 封装意味着隐藏信息,而抽象意味着隐藏植入细节。 因此,当我重载方法时,上面的两个内容是否都带有任何内容……{抽象和加密}
  3. 重载是编译时还是运行时? 他们为什么称其为过载和重载?

是的,您是对的,请期待您输入的错字?

函数重载了多态吗? 如果没有,这是在哪个OOP分支下进行的。

从历史的角度讲,它确实来了,但是仍然有很多人认为它不是多态的一种形式。

超载

根据争论,该方法的功能有所不同。

覆写

该方法的功能取决于使用哪个类来对其进行维护。对于CAT类和DOG类,方法树皮听起来可能有所不同。

封装意味着隐藏信息,而抽象意味着隐藏植入细节。 因此,当我重载方法时,上面的两个内容是否都带有任何内容……{抽象和加密}

不。 也许有人可以回答得更清楚。

重载是编译时还是运行时? 他们为什么称其为过载和重载?

编译时间。 在否决要调用哪个类的方法的决定是在运行时决定的,因此它是runtime

重载方法定义时,仅在编译时检查基于方法调用中传递的参数的可用性。

Java不能仅通过名称来标识方法,而是通过其签名来标识方法。 签名由方法名称和参数类型的有序列表组成。 因此,从编译器和jvm的角度来看,这是两种完全不同的方法。 它们共享名称(并因此具有相似的签名)的事实对人类而言毫无意义。

由于签名是在.class文件中使用的,因此编译器负责在编译时使用方法名称和参数来计算方法调用的签名。 在运行时发生的后期绑定与多态性有关,因为在其上调用某个方法的当前实例可能是重写某个方法的子类的实例,而在Java中,该方法是否也被重载了,则不是运行时完全考虑过。

同一类中不能有两个具有相同签名的方法。 值得注意的是,方法的返回类型不是其签名的一部分,因此,不能有两个具有相同和相同参数的方法,而要返回两种不同的类型。

在其他语言中,例如javascript,由于参数始终是动态的,因此签名仅由方法名称组成,这使得重载是不可能的

关于问题的第一部分,是的,假设第一部分是正确的,第二部分的0是一个错字,那么您显示的代码就是重载的示例。

  1. 我不熟悉这些天如何正式教授这些主题,但是在我看来,重载与多态性并没有真正的关系。 对于那些或多或少执行相同操作(并且经常互相调用)的方法共享名称来说,这只是一种便捷的方法。 我不知道该如何回答你的第二个问题。 什么是“ OOP分支”?

  2. 同样,我不太确定这些方法如何结合。这不取决于方法的实际作用吗?

  3. 好吧,这样想。 在Java中,当您通常调用一个方法时,不考虑重载,系统在哪个阶段确定正在调用哪个方法(而不是该方法的哪个类的实现 )? 至于这些术语的起源,说实话,应该很容易查找。

  1. 由于函数重载可以在没有对象的情况下很好地工作,因此我完全没有理由将其视为OOP概念。 对于是否是多态性的问题,它确实满足了一般要求,并且根据Wikipedia的说法是多态性的一种形式。
  2. 通常,在创建方法时,您总是会同时执行两种操作(将某些常规功能抽象出来,并且隐藏了函数内部工作的信息)。 过载,IMO都不会增加。 (即使通过重载和获得的多态性,您也可以争夺抽象性,因为该功能变​​得更加通用,IMO仍处于相同的抽象级别。)
  3. 过载解析是-最初让我感到惊讶-编译时。 这与所提到的覆盖相反。 (因此,从某种意义上讲,它不是同一种多态,一种是运行时,另一种是编译时。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM