此消息仅适用于Java。如果方法在父类(superclass)中,则可以通过两种方式调用该方法:foo();super.foo();总是做后者有什么坏处吗?作为一种编码风格,我更喜欢后者,因为它一目了然,方法调用来自何处。是否有任何情况下“super”将不存在或不做我认为它会做的事情? 最佳答案 我认为你可能遇到的唯一伤害是当你想使用多态性时,如果你调用foo()并且一些子类覆盖了foo,那么效果将不同于你调用super.foo(),基本上,这取决于您如何设计代码以及出于什么目的。希望这能说明问题。
在java中,我们可以将父类(superclass)对象传递给子类引用吗?我知道这是一个奇怪的问题/实际上不可行,但我想了解这背后的逻辑为什么在java中不允许。classEmployee{publicvoidmet1(){System.out.println("met1");}}classSalesPersonextendsEmployee{@Overridepublicvoidmet1(){System.out.println("newmet1");}publicvoidmet2(){System.out.println("met2");}}publicclassReference
我有以下几种用于hibernate实体层次结构的类。我正在尝试拥有两个具体的子类Sub1Class和Sub2Class。它们由MappedSuperClass中定义的鉴别器列(field)分隔。有一个抽象实体类EntitySuperClass被其他实体引用。其他实体不应该关心它们实际上是在引用Sub1Class还是Sub2Class。这真的可能吗?目前我收到此错误(因为列定义在Sub1Class和EntitySuperClass中被继承了两次):Repeatedcolumninmappingforentity:my.package.Sub1Classcolumn:field(shoul
java背后是否有特殊原因?包装类(java.lang.Integer、java.lang.Boolean、...)没有共同的父类(superclass)型?我问是因为拥有(例如)WrapperType::getType会很方便沿袭经典功能Object::getClass这将返回原始类型的类。更具体地说,上下文是通过反射调用构造函数,而您只有Class。和参数Object[]例如:publicstaticTcreateInstance(Classclz,Object...params)throwsException为了获取构造函数,我可以通过以下方式获取参数类型:Class[]c=Ar
我有一个实现注释的枚举,我收到了警告:注释类型A不应用作MyClass的超接口(interface)。@SuppressWarnings是否有处理此警告的值?我不想使用@SuppressWarnings("all"),我宁愿收到警告也不愿全部禁止。我正在使用Eclipse。 最佳答案 我相信@SuppressWarnings没有这样的值。如果有这样一个值,那么编译器会在警告的同时给你一个使用它的提示。因为它不存在,这可能意味着让您的枚举扩展注释不是一个好主意。如果您仍然想走那条路,那么我认为@SuppressWarnings("al
这是同一问题的稍微详细的版本。我们不能在子类中访问(父类(superclass)的)protected变量,子类在不同的包中。我们只能访问父类(superclass)的继承变量。但是,如果我们将修饰符更改为“protectedstatic”,那么我们也可以访问父类(superclass)的变量。为什么会这样?这是我试图解释的相同代码片段。packagefirstOne;publicclassFirst{**protected**inta=7;}packagesecondOne;importfirstOne.*;publicclassSecondextendsFirst{protecte
我有一个无法更改的遗留架构。我正在为公共(public)功能使用一个基类,它包含一个嵌入式对象。有一个通常映射到嵌入式对象中的字段,它只需要在一个(许多)子类的持久性ID中。我创建了一个包含它的新id类,但随后我收到该字段被映射两次的错误。下面是一些示例代码,为了保持读者的理智而大大简化了代码:@MappedSuperclassclassBaseClass{@EmbeddedprivateDatadata;}@EntityclassSubClassextendsBaseClass{@EmbeddedIdprivateSubClassIdid;}@EmbeddableclassData{
这个问题在这里已经有了答案:Differencesbetween`copy(Listdest,Listsrc)`and`copy(Listdest,Listsrc)`(2个答案)WhatisPECS(ProducerExtendsConsumerSuper)?(16个答案)关闭5年前。我正在尝试深入了解下限通配符的用法。我正在尝试编写一个通用方法copy它复制了一个List的内容给另一个。我想出了这个方法签名:voidcopy(Listdest,Listsrc)我认为这个签名很全面,可以解决所有场景。但是,我看到在JavaCollections类中,方法签名是这样的:voidcopy(
我遇到了一段有趣的Java代码,IntelliJ将其标记为错误,但是javac接受为合法的。要么IntelliJ错了,代码是合法的,要么编译器“错了”,无论是由于错误还是有意放宽规则。我认为我对Java类型系统相当理解得很好,我自己的推理让我怀疑IntelliJ是错误的并且javac是对的。但是,我花了很多时间摸索JLS,我想确定地知道。在我们进入有问题的代码之前,让我们看一些类似绝对非法的代码:interfaceA{}interfaceXextendsA{}interfaceYextendsA{}interfaceZextendsX,Y{}//COMPILEERROR如我所料,Int
我拥有的是一组表示消息类型的Java类(接近25个)。它们都继承自Message类,我希望它是抽象的。每种消息类型都会向Message父类(superclass)提供的集合中添加一些额外的字段。我正在使用RESTeasy实现一些RESTfulWeb服务,并希望有这样的方法:publicResponsepersist(Messagemsg){EntityTransactiontx=em.getTransaction();tx.begin();try{em.persist(msg);}catch(Exceptione){e.printStackTrace();}tx.commit();em