jjzjj

polymorphism

全部标签

C# vs Java - 为什么需要 virtual 关键字?

我已经开始学习一些C#并且遇到了一个令人不安的问题:虚拟方法。是否有必要使用此类关键字的动机?Java中的一个简单多态性不需要virtual关键字就可以工作,甚至Override注释也是可选的:packagefigures;publicclassFigures{publicstaticvoidmain(String[]args){Figurefigure=newFigure();Circlecircle=newCircle();Triangletriangle=newTriangle();Figure[]arrayOfFigures={figure,circle,triangle};f

java - 为什么如果静态方法不涉及多态性(后期绑定(bind))我会看到无法覆盖静态方法的错误

请考虑以下代码:classA{publicstaticvoidm(Numbern){System.out.println("NumberA");};}classBextendsA{publicstaticintm(Numbern){System.out.println("NumberB");return1;};}输出:java:m(java.lang.Number)ininheritanceTest.Bcannotoverridem(java.lang.Number)ininheritanceTest.Areturntypeintisnotcompatiblewithvoid我知道静态

java - 使用 Collection 接口(interface)创建 ArrayList 对象的多态性有什么好处?

我研究了多态性,了解到它可以像下面这样进行动态方法绑定(bind)。假设类Animal是抽象类。publicclassAnimalReference{publicstaticvoidmain(Stringargs[])Animalref//setupvarforanAnimalCowaCow=newCow("Bossy");//makesspecificobjectsDogaDog=newDog("Rover");//nowreferenceeachasanAnimalref=aCow;ref.speak();ref=aDog;ref.speak();}我曾经像这样创建ArrayLis

java - HIbernate 加载子类和类

我正在使用Hibernate连接到我的数据库。我的应用程序中有一个继承结构。问题是,当我执行“来自动物”之类的查询时,它会为类动物、其子类以及动物及其子类的所有关联执行左外连接。我该如何避免这种情况。我只想在我的条件查询中通过fetchmode指定数据时才加载数据? 最佳答案 是的,Hibernate支持多态查询。来自文档:14.8.PolymorphicqueriesAquerylike:fromCatascatreturnsinstancesnotonlyofCat,butalsoofsubclasseslikeDomestic

java - 让Java在重载方法中选择方法时考虑最具体的类型

我想根据对象的类型执行多个操作,而不使用instanceof。起初我在考虑基于类型重载方法(如下所示),并认为Java可能会适本地选择方法(基于最具体的对象类)。importjava.util.ArrayList;importjava.util.List;publicclassTestA{publicstaticvoidmain(String[]args){Listlist=newArrayList();list.add(newA());list.add(newB());list.add(newC());list.add(newObject());TestAtester=newTest

Java多态混淆

下面的问题来自KathySierra和BertBates合着的JavaSCJP5书。给定一个方法声明为:publicstaticListprocess(Listnums)一个程序员想使用这样的方法://INSERTDECLARATIONSHEREoutput=process(input);哪对声明可以放在//INSERTDECLARATIONSHERE以允许代码编译?(选择所有适用项。)A.ArrayListinput=null;ArrayListoutput=null;B.ArrayListinput=null;Listoutput=null;C.ArrayListinput=nul

java - 为什么要为抽象类或接口(interface)类烦恼呢?

这一直让我感到困惑,为什么最好有一个抽象类。所以可以说我必须计算不同形状(圆形,矩形)的面积。我被教导最好有一个抽象/界面形状,然后是Rectangle、Circle等类来扩展它。我做了以下代码abstractclassShape{abstractintgetArea();}classRectangleextendsShape{privateintwidth;privateintheight;publicRectangle(){this.width=width;this.height=height;}//getsetmethodsommitedpublicintgetArea(){re

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规范允许以下内容:classNonGeneric{NonGeneric(){}...NonGenericref=newNonGeneric();}有人能想出一个现实的例子来说明它何时增强了类的类型安全性吗?它比一开始就使用Generic更好。我知道Java设计者希望构造函数与方法更加一致。考虑到构造函数可能有副作用,泛型构造函数可以使用泛型来改变一些不保留引用的参数,如NonGeneric(Tobj,Listlist){list.add(obj);//Don'tholdareferencetolist} 最佳答案

带有子类参数的Java getMethod

我正在编写一个使用反射来动态查找和调用方法的库。只给定一个对象、一个方法名称和一个参数列表,我需要调用给定的方法,就好像该方法调用已明确写入代码中一样。我一直在使用以下方法,在大多数情况下都有效:staticvoidcallMethod(Objectreceiver,StringmethodName,Object[]params){Class[]paramTypes=newClass[params.length];for(inti=0;i但是,当参数之一是该方法支持的类型之一的子类时,反射API会抛出NoSuchMethodException。例如,如果接收器的类定义了testMeth