草庐IT

java - 使用 Java 中的组合和接口(interface)进行设计

我针对一个问题设计了以下内容:classAnimal{//...}classGuppyextendsAnimal{...}classPigeonextendsAnimal{...}classTailedAnimalextendsAnimal{//...}classDogextendsTailedAnimal{...}classCatextendsTailedAnimal{...}classHornedAnimalextendsAnimal{//...}classRamextendsHornedAnimal{...}publicstaticvoidmain(String[]args){A

java - 为什么Java中可以将父类(super class)初始化为子类?

简而言之,这是如何以及为什么可能的:Objectobj=newMyClass();Object是所有对象的父类(superclass),因此MyClass是Object的子类。一般来说,在Java中,为什么可以在父类中使用子类的构造函数?我明白它怎么可能反过来,因为子类拥有父类的所有变量/方法,所以当你初始化它们时,你只是在初始化父构造函数中指定的变量,这些变量按定义存在于child。问题是,当你反过来时,它不一定是真的。子项可以拥有父项没有的变量,那么当父项一开始甚至没有变量时,如何将子项构造函数与父项一起使用?这个特性在开发中有什么用?我想如果你想要一个B类的实例,你会把它声明为B

java - 为什么这两个代码示例会产生不同的输出?

示例1:classAnimal{publicstaticvoidsaySomething(){System.out.print("Gurrr!");}}classCowextendsAnimal{publicstaticvoidsaySomething(){System.out.print("Moo!");}publicstaticvoidmain(String[]args){Animal[]animals={newAnimal(),newCow()};for(Animala:animals){a.saySomething();}newCow().saySomething();}}输出

java - 替换 ArrayList 中的对象

我需要知道如何替换ArrayList中的对象.我有一个名为ArrayList的数组列表.此列表最初仅列出了5种动物。Animalanimal=newAnimal();animal.setName("Lion");animal.setId(1);ArrayLista=newArrayList();a.put(animal);//likewiseiwillbeadding5-6animalshere.稍后,我将从这个数组列表中取出一个对象并对其进行修改。AnimalmodifiedAnimal=newAnimal();animal.setName("BrownLion");animal.s

java - 在该类中声明一个类的实例

此代码在运行时显示错误:classAnimal{Animalobject1=newAnimal();publicstaticvoidmain(String[]args){Animalobj=newAnimal();}}这与Animalobj=newAnimal();代码略有不同,这一行来自main方法注释掉了。此代码显示没有运行时错误。classAnimal{Animalobject1=newAnimal();publicstaticvoidmain(String[]args){//Animalobj=newAnimal();}}这是怎么引起的,我该如何解决?我正在使用命令提示符来运行

java - 为什么在 Java 中的类名周围使用括号?

我遇到了一些代码,尽管我做了一些广泛的搜索,但还是无法理解它的某个方面!我的问题是:为什么类有时像下面的代码一样在括号内声明?publicclassAnimal{publicstaticvoidhide(){System.out.println("ThehidemethodinAnimal.");}publicvoidoverride(){System.out.println("TheoverridemethodinAnimal.");}}publicclassCatextendsAnimal{publicstaticvoidhide(){System.out.println("The

java - 关于Java多态和转换的问题

我有一个C类。E类扩展了它。Ee=newE();Cc=newC();为什么e=(E)c;经过进一步审查:虽然数值转换与转换对象具有相同的语法,但还是出现了一些混淆。无论如何,上面的代码并没有给出编译,而是一个运行时错误——所以在某些情况下可以将一个类转换为子类(否则代码将无法编译)。任何人都可以给出上述工作的例子吗?还有:KextendsMKk=newK();((M)k).getClass()给出K。这是为什么?它被转换为更通用的M!假设我在M和K中都实现了一个doIt()方法。正在执行((M)k).doIt();给出M或K的doIt()?谢谢! 最佳答案

java - 使用 Java 泛型确保接收到的参数与类或其子类型相同

我有一个新手问题。interfaceAnimal{voidpartner(Animalother);}classLionimplementsAnimal{intareaUnderControl;@Overridepublicvoidpartner(Animalother){Lionlion=(Lion)other;this.areaUnderControl+=lion.areaUnderControl;}}classHumanimplementsAnimal{intmoney;@Overridepublicvoidpartner(Animalother){Humanhuman=(Hum

java - 替代 Jackson @JsonSubTypes

Jackson框架提供了基于注解的方法来在序列化过程中发出类型信息。我不想在我的父类(superclass)(动物)中使用@JsonSubTypes注释。相反,我想告诉我的子类,即Dog和Elephant,Animal是它们的父类。有没有在Animal类中不使用注释的方法。如果是,请提供尽可能执行相同操作的示例。以下是我正在尝试解决的案例。“测试”收到的JSON包含“类型”字段,如“狗”或“大象”。我想将这两个类注册为“Animal”类的子类型,但不想在Animal中使用@JsonSubTypes。如有任何帮助,我们将不胜感激。提前致谢。@JsonTypeInfo(use=JsonTy

java - 将字符串输入转换为对象名称的实例(=输入)

我有很多类,我希望用户键入一个名称,他将获得特定对象(类)的同名实例。我用这段代码简化了它:publicclassAnimal{...}publicclasslionextendsAnimal{...}publicclasszebraextendsAnimal{...}//andsoonforalotofanimalsStringname=inputfromuserAnimalsomething=newAnimal(instanceoftheinputname)在最后一行,我实际上想将字符串名称转换为类名称的实例。有什么办法吗?会有很多动物,所以我不想写很多开关案例:“如果输入等于狮子