首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要一个例子来实现通用的多态性(特别是包含)。

我需要一个例子来实现通用的多态性(特别是包含)。
EN

Stack Overflow用户
提问于 2018-05-23 15:10:33
回答 2查看 327关注 0票数 0

问题中,我了解到多态性有4种类型:

  1. 胁迫,
  2. 过载
  3. 参数多态性
  4. 包裹体 所以我没有完全理解包含的含义,我需要同样的例子来实现这个概念。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-23 15:42:33

就像前面提到的,你自己找点东西来了解这个话题……以下是一个可能的解释:

..。子类型允许编写函数以获取特定类型的对象,但如果传递的对象属于T的子类型S(根据Liskov替换原则),则该函数也可以正确工作

代码语言:javascript
运行
复制
abstract class Vehicle
{
    abstract void move();
}

class Car extends Vehicle
{
    public void move() { ... }
}

class Ship extends Vehicle
{
    public void move() { ... }
}

public void moveVehicle(Vehicle v)
{
    v.move();
}

下面是包含多态性的一个示例:

代码语言:javascript
运行
复制
Vehicle [] vs = new Vehicle [2];

vs[0] = new Car();
vs[1] = new Ship();

for(Vehicle v : vs)
{
    moveVehicle(v);
}

或者另一个例子:

代码语言:javascript
运行
复制
Car c = new Car();
Ship s = new Ship();

moveVehicle(c);
moveVehicle(s);

有关更多信息,请参见维基百科-多态性页面..。但还是要搜索一下这个话题,以便对它有更深入的了解!

票数 0
EN

Stack Overflow用户

发布于 2018-05-23 15:51:34

包含多态性意味着您可以从他的超类实例化一个对象。例如,你有

代码语言:javascript
运行
复制
public class Person {
.
.
}

public class Employee extends Person{
.
.
}

所以您可以创建一个对象

代码语言:javascript
运行
复制
Person x = new Employee();

这是有用的,例如,如果您需要创建许多不同的对象,这些对象将重新呈现到单个superType中。

例如,您有SuperTyper geometric_figure和SubTyper图(圆形、正方形、三角形、.)。对于屏幕位置,geometric_figure可能有两个属性x,y和用于在屏幕上绘图的抽象方法“绘图”,每个扩展它的图形都需要实现。

由于java的dynamic link,当您调用dynamic link时,它将自动知道您调用的是哪种类型的geometric_figure (圆形、方形、三角形、.),并对此绘制方法进行了说明。

要手动检查他的特定类是什么,您可以这样做:

代码语言:javascript
运行
复制
Geometric Figure x = new Square();
if(x instance of Square){...}

一个流行的例子是,当您想要重新生成这样的通用对象时

代码语言:javascript
运行
复制
Object x = new AnyClass();

因为对象是每个类都具有的泛型超类。(当您不扩展anythig时,默认情况下它是extand对象)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50491873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档