我有一个要做多态的任务,但是我不能完全确定我是根据老师的证词理解这个概念的。
根据网络定义和示例,这绝对是多态性,但他们说不是。我可以得到确认吗?
OversizedParcel.java
public class OversizedParcel implements ParcelType {
public void resolve(PrivateUser user) {
//do theese
//and those
}
public void resolve(LegalUser user) {
//do different thing
//and a completely different thing
}
}
IllegalParcel.java
public class IllegalParcel implements ParcelType {
public void resolve(PrivateUser user) {
//do this
//do that
}
public void resolve(LegalUser user) {
//do a thing
//do a different thing
}
}
(假设类)
public class Main{
private User user; //loaded user
private List<ParcelType> parcels; //assume this contains the loaded parcels already
public static void main(String[] args){
for(ParcelType type : parcels) type.resolve(user);
}
}
答案 0 :(得分:1)
多态可以定义为-
对象具有多种形式的能力
。多态最常见的例子可能是-
当使用父类引用来引用子类时 对象。
因此,根据您的问题,可以用最简单的方式将多态定义为
ParcelType oversizedparcel = new oversizedParcel();
ParcelType illegalparcel = new illegalParcel();
此处ParcelType
可以是oversizedParcel
或illegalparcel
因此,如果您的理解是按照我的回答,那的确是多态的一个例子。
答案 1 :(得分:0)
根据W3School definition,它确实是多态性。无论如何,如果您的老师说不是,那么他们可能一直在期待您做其他事情。
多态性是一个完整的概念,这意味着您可以使用“相同的事物”或更确切地说“名称相同的事物”来做完全不同的事情。
看看Wikipedia definition(它比任何一种特定于语言的语言都更完整),使它具有更广阔的视野。
答案 2 :(得分:0)
多态性以不同的形式呈现相同的事物。所以,是的,这是多态性。
答案 3 :(得分:0)
我假设在resolve
界面中定义了ParcelType
。然后type.resolve
中的for(ParcelType type : parcels) type.resolve(user)
调用在ParcelType
答案 4 :(得分:0)
我想对这里似乎占多数的意见提出不同意见。请记住,“多态性”是一个相当灵活的术语,此处写的内容并不需要100%的普遍真理。这仅仅是帮助思想平衡的事情。
不,您写的不是多态。这是因为它们实例化了仅实现相同接口的不同不相关对象。
传统上,当您的子对象覆盖了父对象的方法实现时,就会发生多态。因此,在对象的垂直层次结构的不同级别上同时存在一种方法的“多种形式”。
但是,接口仅仅是标准化交互作用的输入和输出的约定合同。它们本身并不保存代码的实例(为了进行对话,我们将排除默认接口方法)。因此,对象内没有接口的“重新定义”。同一对象树不会实例化该接口的多个版本(除非它是通过传统的多态性视图实现的)。
即使某个方法需要接口ParcelType
的两个自变量,也不一定意味着多态,它只是意味着该方法正在请求具有特定形状和大小的两个“盒子”。这些框为空,直到将它们作为分别引用的两个截然不同的对象传递到方法中为止(例如,同一个方法对象不会被子对象覆盖)
不同的对象可以利用接口协定,并且可以说它是“水平多态性”,但是我认为这脱离了Java中多态性的意图。