jjzjj

polymorphism

全部标签

java - 如何在 Java 中找出标识符的声明类型?

我有一个简单的类Apple从另一个简单类Fruit扩展而来。在运行时,我可以使用Fruitfruit=newApple();fruit.getClass();获取水果对象的实际类型,即Apple.class。我还可以使用fruitinstanceofApple和fruitinstanceofFruit来验证这个水果对象是Apple还是Fruit的实例。这2个表达式都返回true,这是正常的。但是有没有办法准确地确定声明的fruit标识符类型呢?在本例中是Fruit。 最佳答案 您实际上是在问有关fruit的变量声明的问题,而不是对象

java - 令人困惑的 Java 多态性

考虑这段代码(完整的类,运行良好,为简洁起见,所有类都在一个类中)。我的问题在代码list之后:importjava.util.LinkedList;importjava.util.List;classGadget{publicvoidswitchon(){System.out.println("GadgetisSwitchingon!");}}interfaceswitchonable{voidswitchon();}classSmartphoneextendsGadgetimplementsswitchonable{@Overridepublicvoidswitchon(){Sys

java - 在 Java 的多态性中使用抽象类是一种好的/常见的做法吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion在所有示例中,我都看到接口(interface)用于实现多态性。现在我们有以下带有抽象类的代码AbstractClassparent=newChild();Here男人说AcommonargumentisthatPolymorphismonlyappliestointerfacesandnotabstractclasses.我认为他的意思是它们通常是在Java中用于多态性的接口(inter

c# - 是否有与 C# 中的 'new' 修饰符等效的 Java?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Istherea‘new’modifierformethodsinJava?在c#中,子类的方法可以是modifiedasnew.new修饰符的一种用法,用于显式隐藏从基类继承的成员。Java中有相同的关键字吗?

java - 运行时多态性决定

我在某处读到,运行时多态性是语言中动态类型化的结果。通过检查下面的代码,我们可以看到一个清晰的运行时多态性示例。classA{do(){}}classBextendsA{do(){}}...Aex=newB();ex.do();由于存在父类(superclass)类型引用,编译器无法决定实际引用哪个类型并在运行时绑定(bind)方法。但是下面使用相同类定义的用法呢?我的第一个问题是关于下面的例子;classA{do(){}}classBextendsA{//nooverriding}...Aex=newB();ex.do();层次结构中只有一个版本的方法do()。系统是否仍然等待运行时

java - 如何根据子类类型调用java方法?

我正在尝试根据子类将对象分派(dispatch)到单独的方法。例如,考虑这两个对象classAextendsI{}classBextendsI{}和方法voiddispatch(Ii){}在dispatch()中,我想根据i的类型调用一个方法。因此,如果i实际上是类型A,则将调用handlerA(Aa)方法。如果它是类型B,将调用handlerB(Bb),依此类推......我尝试使用方法重载,但我想它不会这样工作实现此目标的最佳方法是什么?我想避免使用if/else语句...提前致谢编辑:我无法修改任何这些类。 最佳答案 使用Vi

java - 以 Parent 和 Child 类作为参数的方法重载

这个问题在这里已经有了答案:Javadynamicbindingandmethodoverriding(12个答案)关闭8年前。我有3个类GrandParent、Parent和Child,其中ChildextendsParent和ParentextendsGrandParentpublicclassMain{voidtest(GrandParentgp){System.out.println("GrandParent");}voidtest(Parentp){System.out.println("Parent");}publicstaticvoidmain(Stringargs[])

java - 将 java.lang.reflect.getMethod 与多态方法一起使用

考虑以下片段:publicclassReflectionTest{publicstaticvoidmain(String[]args){ReflectionTesttest=newReflectionTest();Stringobject=newString("Hello!");//1.StringisacceptedasanObjecttest.print(object);//2.TheappropriatemethodisnotfoundwithString.classtry{java.lang.reflect.Methodprint=test.getClass().getMeth

java - 多态性,如何避免类型转换?

很抱歉问了这么长的问题,但请耐心等待,我已尽力让我的问题尽可能易于理解。如果您认为它可以更简洁,请随时对其进行编辑。我有一个客户端-服务器系统,其中客户端向服务器发送不同类型的请求,并根据请求返回响应。客户端系统中的代码是:intrequestTypeA(){Requestrequest=newRequest(TypeA);Responseresponse=request.execute();//responseforrequestofTypeAcontainsaintreturnresponse.getIntResponse();}StringrequestTypeB(){Reque

java - 使用 Mockito 的 ArgumentCaptor 类匹配子类

下面的代码显示了我的问题。实际上,我正在尝试使用Mockito的ArgumentCaptor来验证是否使用某个具体类调用了一次方法。如果可能的话,我想在这里使用ArgumentCaptor,但我开始怀疑我需要改用自定义ArgumentMatcher。问题是Mockito.verify(mocked).receive(captor.capture());行(编辑:将此添加到下面的代码中)失败并出现TooManyActualInvocations异常(改为21).我想了解为什么会发生这种情况-是Mockito的实现不当还是由泛型类型删除引起的限制?publicclassFooReceive