草庐IT

Java 多态性使用父类(super class)变量创建子类对象

所以我是一名学生,正在学习Java。有一个概念我很难理解,希望有人能为我阐明这一点。我的问题是关于多态性。比方说我有以下代码。Animala=newLizard("Lizzy",6);//LizardextendsAnimal据我了解,由于变量类型是Animal,a将具有Animal的所有特征。但是,由于创建的对象是Lizard,因此将使用Lizard类中的任何重写方法,而不是Animal类中的方法。这是正确的吗>另外,在创建类时会使用哪些类的构造函数?感谢您的帮助。我看起来很漂亮 最佳答案 1.FromwhatIunderstan

java - Java 内部类

我在学习Java中阅读了有关内部类的内容。我找到了这段代码classAnimal{classBrain{}}编译后,javap'Animal$Brain'输出为Compiledfrom"Animal.java"classAnimal$Brain{finalAnimalthis$0;Animal$Brain(Animal);}这解释了内部类如何在内部类构造函数中获取对其封闭实例的引用。但是当我像这样将内部类定义为私有(private)时classAnimal{privateclassBrain{}}然后在编译之后,javap'Animal$Brain'给出输出为Compiledfrom"

java - 如果列表包含不同的类,如何使用 gson 将 json 转换为 arraylist?

我想把一个arraylist存到磁盘,所以我用gson把它转成stringArrayListanim=newArrayList();Catc=newCat();Dogd=newDog();c.parentName="IamanimalC";c.subNameC="Iamcat";d.parentName="IamanimalD";d.subNameD="Iamdog";anim.add(c);anim.add(d);Gsongson=newGson();Stringjson=gson.toJson(anim);publicclassAnimal{publicStringparentNa

java - 在运行时使用 Jackson 为多态添加 SubType 信息

我正在使用Jackson从JSON中解码多态类型。我正在使用类似于thispost中示例4的@JsonTypeInfo、@JsonSubTypes和@JsonTypeName注释.我的问题是,假设现在我需要其他人扩展我的代码并添加第3类:publicclassDuckextendsAnimal在原始代码库之外。我(或其他人)如何在不修改publicabstractAnimalclass的源代码(注释)的情况下添加SubType信息?更新:我被迫使用@JsonTypeName来解决POJO版本的变化。例如:packagemy.zoo;@JsonTypeInfo(use=JsonTypeI

java - 使用多态 JAX-WS web 服务参数

我有这个简单的JAX-WSWebService:@WebServicepublicclassAnimalFeedingService{@WebMethodpublicvoidfeed(@WebParam(name="animal")Animalanimal){//Whatever}}@XmlSeeAlso({Dog.class,Cat.class})publicabstractclassAnimal{privatedoubleweight;privateStringname;//Alsogettersandsetters}publicclassDogextendsAnimal{}pub

java - JAXB @XmlElements,不同类型但名称相同?

我有一个Animal类和一个名为AnimalExtension的Animal扩展。publicclassAnimalpublicclassAnimalExtensionextendsAnimal这两个类之间的唯一区别是AnimalExtension有另一个名为animalId的实例变量。Animal没有这个实例变量。我也有自己的数据类型,我想将其编码和取消编码为XML。这种数据类型称为AnimalList。在AnimalList中,有一个Animals列表作为实例变量。@XmlType(name="AnimalList")publicclassAnimalList{privateLis

java - 使用 Jackson ObjectMapper 将子类名称序列化为 JSON,而不是父类(super class)

在以下将对象序列化为JSON的Jackson/Java代码中,我得到了这个:{"animal":{"x":"x"}}然而,我真正想要得到的是:{"dog":{"x":"x"}}我可以对AnimalContainer做些什么,以便获得对象的运行时类型(“dog”、“cat”),而不是“animal”)?(编辑:我知道map名称来自getter和setter方法名称。)我能想到的唯一方法是在AnimalContainer中具有每种类型的动物的属性,具有所有动物的setter和setter/getter,并强制一次只有一个被重视。但这违背了拥有Animal父类(superclass)的目的,

Java 多态性

这是出于好奇而提出的问题。我知道,当我们通过父类(superclass)的引用调用子类对象的重写方法时,JVM重视对象的类型而不是引用的类型。这是我的简单代码:classAnimal{voideat(){System.out.println("Animaliseating...");}}classHorseextendsAnimal{@Overridevoideat(){System.out.println("Horseiseating...");}}publicclassPolymorphismTest{publicstaticvoidmain(String...args){Anim

java - java 中的多态性 : Why do we set parent reference to child object?

我想了解将父引用设置为子对象的用例。示例:Dog类扩展了Animal类。(没有接口(interface),请注意)我通常会像这样创建一个Dog对象:Dogobj=newDog();现在,由于Dog是Animal的子类,它已经可以访问Animal的所有方法和变量。那么,这有什么区别:Animalobj=newDog();请提供一个正确的用例及其使用代码片段。请不要发表关于“多态性”或“接口(interface)编码”的理论文章!代码:publicclassPolymorphism{publicstaticvoidmain(String[]args){Animalobj1=newDog()

c++ - 在 C++ 接口(interface)中声明模板函数?

为了演示,假设我有一些动物类,每个都派生自“动物”类,每个都“知道”它们是什么类型,并且每个都具有某种独特的能力:enumclassanimal_type{antelope,bear,cat};classanimal{};classantelope:publicanimal{public:staticconstanimal_typetype=animal_type::antelope;voidrun(){std::cout现在,我希望能够根据动物的类型检索动物:classanimal_getter{public:animal&get(animal_typet){staticantelo