多态在Java的方法参数中不起作用

原学程将引见多态在Java的办法参数中没有起感化的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

多态在Java的方法参数中不起作用 教程 第1张

成绩描写

我写了以下代码:

class Plane {}
class Airbus extends Plane {}

public class Main {

 void fly(Plane p) {
  System.out.println("I'm in a plane");
 }

 void fly(Airbus a) {
  System.out.println("I'm in the best Airbus!");
 }

 public static void main(String[] args) {

  Main m = new Main();

  Plane plane = new Plane();
  m.fly(plane);

  Airbus airbus = new Airbus();
  m.fly(airbus);

  Plane planeAirbus = new Airbus();
  m.fly(planeAirbus);

 }
}

成果为:

I'm in a plane
I'm in the best Airbus!
I'm in a plane

绝不奇异,前二个挪用分离给出I'm in a plane以及I'm in the best Airbus!

Plane planeAirbus = new Airbus();

该办法将该对于象望为飞机,即便现实对于象是1排挤中客车。即便我将abstract添减到class Plane,也出有甚么变更,最初1次挪用的成果依然是I'm in a plane

是以,成绩是为何多态在办法参数以及挪用中没有起感化?如许做有甚么目标吗?它是怎样任务的?

推举谜底

这里的成绩是JAVA没有支撑办法参数的静态绑定。您瞅到的是动态绑定,即在编译时选摘要挪用的办法的重载。

另睹:Static Binding and Dynamic Binding

佳了闭于多态在Java的办法参数中没有起感化的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。