jjzjj

polymorphism

全部标签

java - 将对象声明为接口(interface)有什么好处?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatdoesitmeanto“programtoaninterface”?我注意到有些人喜欢将对象声明为它实现的接口(interface)之一即使在变量的范围内,没有必要将其视为接口(interface),例如没有需要接口(interface)的外部API。例如:MapsomeMap=newHashMap();或者你可以这样做HashMapsomeMap=newHashMap();并避免完全导入java.util.Map。与类本身(上面第二个)相比,通过接口(interface)(上面第一个)声明它有什么

Java:对于每个循环,迭代扩展对象

我的问题可能很简单,我有一个类Result有一些内部领域,setters和getters。此外,我还有课Special1Result延伸Result并包括更多字段和Special2Result还有一些数据。在不同的类(class)Dispatcher,我写了下面的方法:processResults(Listresults),这只熟悉Result(我需要这个方法来查询扩展结果对象中是否有特定字段——我正在使用注释)。所以我决定使用扩展的for-each循环:for(Resultres:results){}那么我的问题是什么?我试图在网上找到如何为扩展对象编写这个for循环,例如像这样的f

Java 未经检查的重写返回类型

我有一个包含以下组件的项目:publicabstractclassBaseThing{publicabstractThingDoergetThingDoer();}publicclassSomeThingextendsBaseThing{publicThingDoergetThingDoer(){returnThings.getSomeThingDoer();}}publicclassSomeOtherThingextendsBaseThing{publicThingDoergetThingDoer(){returnThings.getSomeOtherThingDoer();}}pu

java - 覆盖具有不同签名的方法

我有一个父类(superclass)的方法:protected,TextendsVO>voidprocessarRelatorioComEstado(DatedataInicial,DatedataFinal,Eestado)throwsRelatorioException{thrownewUnsupportedOperationException("methodnotoverridden");}在它的一个子类中我想做以下事情:@Overrideprotected>DemonstrativoReceitaDespesasAnexo12VoprocessarRelatorioComEst

java - 编译时多态性

我有一个关于java中编译时多态性的问题。方法重载是一种实现编译时多态性的方式吗?如果是,这是唯一的方法吗?小例子会对我有很大帮助。我在网上搜索过,不同的来源给出了不同的答案,令人困惑。这就是为什么我想到在这里问它。提前致谢。 最佳答案 我找到了这个externalsource.它声明没有“编译时多态性”。您可能是指“运行时多态性”?从本质上讲,多态性是指一个方法不是由在编译时定义的固定方法实现执行的特性,而是在运行时查找选择哪个方法实现来执行调用。比如Java中有Object::equals,它在“Object”类中有实现。如果您

java - 为什么类型兼容性在覆盖方法时也不适用于原语?

当我们说基类Base及其派生类Derived是类型兼容时,我们指的是Base引用可以引用Derived实例。IE。Baseb=newDerived();相反,由于类型不兼容,因此需要进行强制转换。现在这个概念是否不适用于原始类型?我是说这个shortshortNumber=10;intintNumber=shortNumber;对我来说似乎是同一件事(因为也不需要强制转换,short和int都是整数类型)。因此,当覆盖基类中的方法时,为什么返回类型与基类的返回类型相同或至少类型兼容是可以接受的,但这也不适用于整数类型?例如。为什么这是NotAcceptable?publicclassP

java - 使用多态性初始化对象列表

我有一个关于应用多态性的问题:假设我有一个类Bird,并且我有许多扩展它的类(如Pigeon、Falcon等等)。接下来,我有一个Cage类。在这门课中,我想列出住在那个笼子里的鸟(每个笼子里只能住一种鸟)。因此,我不知道列表的扩展类型(APigeon?或者Eagle?),我唯一知道的就是它将是一只鸟。如果PigeonextendsBird使用多态性,我可以将一只鸟声明为:Birdtom=newPigeon();而不是Pigeontom=newPigeon();那么为什么我不能在构造函数中初始化类似的东西:[...]privateListbirdList;publicCage(){th

Java 多态性 : How can I avoid type casting input parameters?

假设我们有一个带有compare()函数的Parent接口(interface)。publicinterfaceParent{publicintcompare(ParentotherParent);}假设childChild1、Child2、Child3实现了这个接口(interface)ParentpublicclassChild1implementsParent{@Overridepublicintcompare(Parentother){Child1otherChild=(Child1)other;}}此外,我正在使用泛型代码中的其他地方。所以我需要从代码的其他部分比较两个类型为

Java - (匿名子类)在对象实例构造期间覆盖方法

我正在维护一些Java8代码,如下所示:ClassEntity{protectedModeltheModel;publicEntity(){init();}protectedvoidinit(){this.theModel=newModel();}}ClassModel{}ClassSubModelextendsModel{}main{EntitynewEntity=newEntity(){@Overrideprotectedvoidinit(){this.theModel=newSubModel();}};}代码目前可以正确编译和运行,但我现在需要更新它。我的问题是:在newEnti

java - 为什么 "synchronized"对多态没有作用

synchronized不是方法签名的一部分。但是当我们覆盖一个方法时,决定被覆盖的方法是否编译的不仅仅是方法签名。例如,我们不能添加或扩大检查异常为什么synchronized在多态性中没有作用。一个synchronized方法不应该在没有放置synchronized的情况下被覆盖。因为使用父类(superclass)变量的人可能认为所有方法都是线程安全的。但非同步方法应该允许被synchronized覆盖,因为它增加了更多的功能,但另一方面用户不会遇到任何错误,除了时间延迟。我正在寻找一个合乎逻辑的解释,它可以阐明“为什么这样设计”。 最佳答案