Tag: polymorphism

方法是否重载了一种多态?

我正在研究静态和动态多态,并得到这些链接: http://guruzon.com/1/oop-concepts/polymorphism/what-is-polymorphism-example-tutorial-uml-diagram-notation http://www.coderanch.com/t/379004/java/java/static-polymorphism-dynamic-polymorphism http://javarevisited.blogspot.in/2011/08/what-is-polymorphism-in-java-example.html 在所有这些链接中,有人说过载是多态的一个例子,然后我遇到了另外两个地方,据说重载与多态无关,链接是: 方法重载是多态吗? Head First Java第2版第7章(inheritance和多态)上一主题:重载方法 。 现在我无法弄清楚它是否是一种多态性,如果它不是OOP中有什么称为静态多态的话?

动态绑定== Java中的后期绑定与否?

在不同的来源中,我已经阅读了有关该主题的不同内容。 比如维基百科说: 后期绑定经常与动态调度混淆,但存在显着差异。 但后来几行 在Java编程中使用术语后期绑定作为动态调度的同义词很受欢迎。 具体来说,这是指Java与虚拟方法一起使用的单一调度机制。 那么真相是什么?这个“重大差异”是什么?

swig c ++ w / Java在多态回调函数上丢失类型

可能重复: SWIG Java保留从C ++反弹的对象的类信息 问题 :为什么我的C ++ swigged对象在传递给Java回调函数时会丢失其类型? 安装程序 :我已经使用Swig Java示例进行回调并添加了一个要传递给回调run(Parent p)的对象run(Parent p) 。 回调按预期工作,但是当我传递一个Child对象时,Java似乎失去了它的类型,并认为它的类型为Parent ,它应该是Child 。 这基于Swig java回调示例 。 系统信息 :Ubuntu 8.04 w / Swig 1.3.33 – 关于最新Swig产生差异的机会我也测试了1.3.39 – 这没有效果。 产出 : bash $ java -Djava.library.path =。 邵仁枚 添加并调用普通的C ++回调 —————————————- 回调::运行(5Child) 回调::〜回调() 添加和调用Java回调 ———————————— JavaCallback.run(家长) 回调::运行(5Child) 回调::〜回调() 正如你在输出中看到的那样 – 对象实际上是Child类型 – 但它的Java类名是Parent – […]

jackson为一个具有多态类型的字段定制解串器

更新: 我尝试在jackson源代码中调试并在方法中找出它 deserialize(JsonParser jp, DeserializationContext ctxt) SettableBeanProperty.java 当_valueTypeDeserializer不为null时,它将永远不会使用_valueDeserializer 。 这是一个正确的假设,TypeDeserializer应该比ValueDeserializer更合适吗? 我正在尝试使用@JsonDeserialize为具有多态类型的一个字段定义自定义反序列化器。 我可以单独使用@JsonDeserialize和@JsonTypeInfo 。 但是当我一起使用它们时,似乎忽略了@JsonDeserialize注释。 这是我的类层次结构: 1. Definition.java @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”, defaultImpl = Definition.class) @JsonSubTypes({@Type(value = Definition.class, name = “normal”), @Type(value = FormDefinition.class, name = “form”)}) public class Definition { private String name; private String description; // getter&setter for name&description […]

jackson多态反序列化 – 您是否可以要求存在字段而不是特定值?

在动物园示例中使用旋转: public class ZooPen { public String type; public List animals; } public class Animal { public String name; public int age; } public class Bird extends Animal { public double wingspan; } 如果没有指定翼展,我想使用多态反序列化来构造Animal实例,如果是,则使用Bird实例。 在Jackson中,无类型反序列化通常看起来像这样: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “wingspan”, visible = true, defaultImpl = Animal.class ) @JsonSubTypes({ @Type(value = […]

基于Enum的Jackson多态反序列化

我正在使用JacksonPolymorphicDeserialization ,这是我的代码,它反序列化为基于’type’属性的正确类: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”, defaultImpl = Event.class, visible = true) @JsonSubTypes({ @Type(value = SpecialEvent1.class, name = “SPECIAL_EVENT_1”), @Type(value = SpecialEvent2.class, name = “SPECIAL_EVENT_2”), }) public abstract class AbstractEvent { private String type; public String getType() { return type; } public void setType(String type) { this.type = type; […]

动态注入spring bean

在java-spring网络应用程序中,我希望能够动态注入bean。 例如,我有一个具有2种不同实现的接口: 在我的应用程序中,我使用一些属性文件来配置注入: #Determines the interface type the app uses. Possible values: implA, implB myinterface.type=implA 我的注入实际上是有条件地在属性文件中的属性值上加载的。 例如,在这种情况下myinterface.type = implA无论我在哪里注入MyInterface,将注入的实现都是ImplA(我通过扩展条件注释来实现 )。 我希望在运行时 – 一旦属性发生更改,将发生以下情况(无需重新启动服务器): 将注入正确的实现。 例如,当设置myinterface.type=implB ImplB将被注入到使用MyInterface的地方 应该使用新值刷新Spring Environment并重新注入bean。 我想要刷新我的上下文,但这会产生问题。 我想可能会使用setter进行注入,并在重新配置属性后重新使用这些setter。 是否有这种要求的工作实践? 有任何想法吗? UPDATE 正如一些人所建议我可以使用一个工厂/注册表来保存两个实现(ImplA和ImplB),并通过查询相关属性返回正确的实现。 如果我这样做,我还有第二个挑战 – 环境。 例如,如果我的注册表看起来像这样: @Service public class MyRegistry { private String configurationValue; private final MyInterface implA; private final MyInterface implB; @Inject […]

C ++:为事件处理程序创建一个匿名类

免责声明:此描述包含许多Qt细节。 他们没有必要回答这个问题,我只想给你一个背景。 我需要对QTextEdit的focusInEvent做出反应。 不幸的是,这不是一个信号,这就是我需要QTextEdit的原因。 由于这是我需要的唯一更改,我想使用匿名子类 像这样: myTextEdit =new QTextEdit(){ void focusInEvent(){ //code here } }; 这是我用Java编写的代码,它不能用c ++编译。 以下所有代码都在自定义QWidget的构造函数中。 QTextEdit包含在此小部件中,应在其构造函数中初始化。 奇怪的是这段代码编译: class MyTextEdit:protected QTextEdit{ void focusInEvent(); }; auto myTextEdit=new MyTextEdit(); 但是没用,因为我无法将myTextEdit*的实例分配给指向QTextEdit的指针。 不知何故,多态失败。 此代码无法编译: class MyTextEdit:protected QTextEdit{ void focusInEvent(); }; QTextEdit* myTextEdit=new MyTextEdit(); 编译器错误是: /home/lars/ProgrammierPraktikum/moleculator/implementation/Moleculator/gui_elements/editor.cpp:40:错误:’QTextEdit’是’Editor :: Editor(std :: shared_ptr):: MyTextEdit’QTextEdit * myTextEdit =无法访问的基础新的MyTextEdit(); 实际问题: 如何创建与其超类的指针兼容的匿名子类?

转换为超类,并调用Overriden方法

我有下一个问题。 我扩展了一个类, Parrent并覆盖了Child类中的一个方法。 我试图将类型转换为超类类型,但每次都得到子代的重写方法。 当我使用多态时也会发生这种情况。 问题出现在以下代码内的评论中…提前致谢 class Parrent{ public void test(){ System.out.println(“parentTest”); } } class Child extends Parrent{ @Override public void test(){ System.out.println(“childTest”); } } class StartProgram{ public static void main(String[] args) { Parrent p1 = new Parrent(); p1.test(); // output: parentTest Child c1 = new Child(); c1.test(); // output: childTest Parrent p2 = new […]

Java转换为超类并调用重载方法

abstract class A { int met(A a) { return 0; } int met(B b) { return 1; } int met(C c) { return 2; } } class B extends A { int met(A a) { return 3; } int met(B b) { return 4; } int met(C c) { return 5; } } class C […]