草庐IT

Overriding

全部标签

java - 带有美元符号和数字 .class 的 java 文件名是什么意思 (name$1.class)?

这个问题在这里已经有了答案:javacompiledclassescontaindollarsigns(4个答案)关闭9年前。当我编译我的javaEnumDay时,它生成了他的Day.class文件和8Day$#.class文件,所以我想知道为什么编译器生成8个$#.class而不是7个,因为我有7个枚举常量,但有8个重写注释,我知道Dollar.class文件是为每个内部类或枚举常量生成的,但是八个.class文件的生成目的是什么?packagecom.kaissersoft.test.objective.one.three.enums;publicenumDay{SUNDAY(01

java - 用抽象方法覆盖默认接口(interface)方法

我觉得它很奇怪,想知道它是否是经常使用的东西。什么时候有用?publicinterfaceInterA{ObjectgetInfo()throwsException1;}publicinterfaceInterB{publicdefaultIntegergetInfo(Objects){return67;}}publicinterfaceInterCextendsInterA,InterB{@OverridepublicabstractIntegergetInfo(Objects);} 最佳答案 这在默认接口(interface)方

java - 我可以同步覆盖的方法吗?

我正在重写父类(superclass)中的一个方法,但是我希望这个方法是同步的。允许吗?有什么替代方案? 最佳答案 是的,这是允许的,因为它不会改变契约(Contract),而是会改变实现。认为您总是可以简单地添加一个同步块(synchronizedblock):synchronized(this){就在方法的开头,这将实现大致相同的结果。该方法中还可能有其他(可能隐藏的)更深的锁,这使得它真正成为实现的一部分,而不是API。 关于java-我可以同步覆盖的方法吗?,我们在StackOv

java - 覆盖的目的

这是一个非常幼稚的问题,但这里是:基类的重写方法意味着对子类的调用将调用派生的重写方法,对吗?这样,如果没有override注解,就会调用基类中的方法。因此,override方法将纯粹用于记录意图-在另一个方法上调用一个版本。是这样吗?这引出了以下问题:5-6个类可能派生但派生类中继承的方法未被覆盖的抽象类与这5-6个类使用的一个类(静态或无关紧要)之间有什么区别? 最佳答案 @Override注释仅用于在编译时捕获错误。它不会影响运行时的覆盖行为。这个想法是让编译器有机会通知您您的方法名称或签名是错误的。

java - Java中如何根据接口(interface)对象获取实现类名

我想从我的接口(interface)对象中获取实现类名——有什么方法可以做到这一点吗?我知道我可以使用instanceof来检查实现对象,但在我的应用程序中有将近20到30个类实现相同的接口(interface)来覆盖一个特定的方法。我想弄清楚它将调用哪个特定方法。 最佳答案 只需使用object.getClass()-它将返回用于实现您的接口(interface)的运行时类:publicclassTest{publicinterfaceMyInterface{}staticclassAClassimplementsMyInterf

Java 接口(interface) : Inheriting, 覆盖和重载方法

在KenArnold、JamesGosling、DavidHolmes的“THEJava™ProgrammingLanguage,FourthEdition”中提到:段落:(4.3.2)“类似地,如果一个接口(interface)继承了多个具有相同签名的方法,或者如果一个类实现了包含具有相同签名的方法的不同接口(interface),则只有一个这样的方法。这个方法的实现最终由实现接口(interface)的类,那里没有歧义。如果方法具有相同的签名但返回类型不同,则其中一个返回类型必须是所有其他返回类型的子类型,否则会发生编译时错误。实现必须定义一个返回该公共(public)子类型的方法

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

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

java - 覆盖 java.lang.Enum.values() 上的 Javadoc 注释

关于方法java.lang.Enum我有一个非常具体的问题.values().我想覆盖它的javadoc。非常准确地说,当前的javadoc是在我创建自己的枚举之后:publicstaticMyClass.MyEnum[]values()...Thismethodmaybeusedtoiterateovertheconstantsasfollows:for(MyClass.MyEnumc:MyClass.MyEnum.values())System.out.println(c);Returns:...但在我的公司System.out调用被认为是不好的做法,所以我不希望它被显示出来。我的

Java - 错误 : return type is incompatible

我正在学习Java。我试图运行代码,但出现此错误:returntypeisincompatible。显示错误的部分代码。classA{publicvoideat(){}}classBextendsA{publicbooleaneat(){}}为什么会这样? 最佳答案 这是因为我们不能在具有相同名称但返回类型不同的类中拥有两个方法。子类不能声明一个与父类中已经存在的方法具有相同名称但返回类型不同的方法。但是,子类可以声明一个与父类(superclass)具有相同签名的方法。我们称之为“覆盖”。你需要有这个,classA{publicv

java - 如何确保在类中重新实现 toString() 方法?

假设我有一个接口(interface)和许多实现该接口(interface)的类。我想在每个类中强制覆盖toString()的默认实现(也就是说,如果某些类不覆盖它,那将导致编译错误)。有可能实现吗?在接口(interface)体中声明publicabstractStringtoString();,带或不带@Override注解,都是合法的,但没有任何作用。 最佳答案 是的,有点。protectedabstractStringinternToString();然后@OverridepublicStringtoString(){ret