在问题中,我了解到多态性有4种类型:
发布于 2018-05-23 15:42:33
就像前面提到的,你自己找点东西来了解这个话题……以下是一个可能的解释:
..。子类型允许编写函数以获取特定类型的对象,但如果传递的对象属于T的子类型S(根据Liskov替换原则),则该函数也可以正确工作
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();
}
下面是包含多态性的一个示例:
Vehicle [] vs = new Vehicle [2];
vs[0] = new Car();
vs[1] = new Ship();
for(Vehicle v : vs)
{
moveVehicle(v);
}
或者另一个例子:
Car c = new Car();
Ship s = new Ship();
moveVehicle(c);
moveVehicle(s);
有关更多信息,请参见维基百科-多态性页面..。但还是要搜索一下这个话题,以便对它有更深入的了解!
发布于 2018-05-23 15:51:34
包含多态性意味着您可以从他的超类实例化一个对象。例如,你有
public class Person {
.
.
}
public class Employee extends Person{
.
.
}
所以您可以创建一个对象
Person x = new Employee();
这是有用的,例如,如果您需要创建许多不同的对象,这些对象将重新呈现到单个superType中。
例如,您有SuperTyper geometric_figure和SubTyper图(圆形、正方形、三角形、.)。对于屏幕位置,geometric_figure可能有两个属性x,y和用于在屏幕上绘图的抽象方法“绘图”,每个扩展它的图形都需要实现。
由于java的dynamic link
,当您调用dynamic link
时,它将自动知道您调用的是哪种类型的geometric_figure (圆形、方形、三角形、.),并对此绘制方法进行了说明。
要手动检查他的特定类是什么,您可以这样做:
Geometric Figure x = new Square();
if(x instance of Square){...}
一个流行的例子是,当您想要重新生成这样的通用对象时
Object x = new AnyClass();
因为对象是每个类都具有的泛型超类。(当您不扩展anythig时,默认情况下它是extand对象)
https://stackoverflow.com/questions/50491873
复制相似问题