Tag: 覆盖

Java重写两个接口,方法名称的冲突

我在一个类中实现了Map和Collection接口,但是在两个接口中都发生了remove(Object)方法,因此eclipse向我显示了一些错误。 返回类型不同,一个返回boolean ,另一个返回V但这似乎并不重要。 有没有办法告诉java / eclipse哪个方法实际被覆盖? 编辑:我有一个所有值必须实现的接口,它使用getKey()方法提供值,从而可以为地图编写一个add函数。 但是似乎没有办法让这个类同时看起来像一个地图和一个集合?

Java – 什么是“@Override”用于?

可能重复: 在java中有什么“@Override”? 到目前为止,我从来没有在方法之前放置“@Override”。 我看到了一些代码示例,但我不明白它的实用性。 我喜欢一些解释。 非常感谢, JDelage

什么是“覆盖等价”,它与@Override有什么关系?

读取@Override注释的Javadoc ,我遇到了以下规则: 如果使用此注释类型注释方法,则编译器需要生成错误消息,除非至少满足下列条件之一: 该方法会覆盖或实现在超类型中声明的方法。 该方法的签名覆盖等效于Object中声明的任何公共方法。 我对第一点很清楚,但我不确定第二点。 “覆盖等价”是什么意思? 在这方面, Object公共方法如何特殊? 为什么这不属于第一个标准? 更新说明:这仅适用于Java 7文档。 Java 6 doc没有提到有关覆盖等价的任何内容。 为什么要改变? 更新: 在咨询了JLS( 第8.4.2节 )之后,我发现了以下对覆盖等价的解释: 方法m1的签名是方法m2的签名的子签名,如果: m2与m1具有相同的签名,或 m1的签名与m2签名的擦除( §4.6 )相同。 如果m1是m2签名或m2是m1签名,则两个方法签名m1和m2是覆盖等价的 。 据我所知,这回答了第一个问题(“它是什么意思?”)和第三个问题(“为什么第一个条件不包括这个?”)。 如果我理解正确(如果我不理解,请通知我!),只有一种情况,两种方法是覆盖等价的, 并且不属于原始问题的第一个条件。 当子类方法的签名的擦除与超类方法的签名相同时,情况就是这种情况,而不是相反。 因此,当我们在尝试“覆盖” Object类的公共方法时尝试添加类型参数时,原始问题的第二个条件才会发挥作用。 我尝试了以下简单示例来测试它,使用未使用的类型参数: public class Foo { @Override public boolean equals(Object obj) { return true; } } 当然,这个类不编译,因为该方法实际上并没有覆盖equals方法,因此与它发生冲突。 但是我仍然收到使用@Override注释的错误。 假设这是@Override使用的第二个条件的有效示例,我错了吗? 或者编译器是否生成此错误, 尽管不需要 ?

c#中有什么类似于java的@override注释吗?

我在java中使用了@Override并且非常方便。 c#中有类似的东西吗?

用Java覆盖用户库类

我使用BlueJ for Mac编写java代码。 我添加了stdlib.jar库(来自princeton http://introcs.cs.princeton.edu/java/stdlib/ )。 在添加这个库之前,我有自己的类名为StdDraw.java(我在项目中使用的特定类)并复制/粘贴代码。 我还调整了一些代码并添加了一些新行。 由于我无法编辑库代码,我如何覆盖或扩展库类以添加其他function?

Java – 向上转发和向下转发

我知道stackoverflow中有很多文章/问题描述了Java中的向上转换和向下转换。 我知道什么是向上倾斜和向下倾斜。 但我的问题并不是特别的。 上传 – 从孩子到父母的转换 – 编译器会照顾。 不需要演员表 向下转换 – 从父级转换为子级 – 需要显式转换 public class Animal { public void getAnimalName(){ System.out.println(“Parent Animal”); } } public class Dog extends Animal{ public void getDogName(){ System.out.println(“Dog”); } } public static void main(String[] args) { Dog d = new Dog(); Animal a = d; // Upcasting a.getAnimalName(); Animal […]

在具有generics的子类型的inheritance接口中覆盖方法

我在java中有以下层次结构: interface ObserverA {} interface A { void method1(); addObserver(Observer o); } 我想像这样扩展它: interface ObserverB extends ObserverA{} interface B extends A { void method2(); addObserver(ObserverB o); } 以这种方式, B的addObserver()方法将覆盖A的相同方法。 因为它不起作用, B实现需要实现addObserver()两个版本,我不会只有一个版本。 这可以通过巧妙的方式完成,不需要参数化A如: interface A { addObserver(O o); } Hackish解决方案非常受欢迎!

为什么静态方法不涉及多态(后期绑定)我看到错误,静态方法不能被覆盖

请考虑以下代码: class A{ public static void m(Number n){ System.out.println(“Number A”); }; } class B extends A{ public static int m(Number n){ System.out.println(“Number B”); return 1; }; } 输出: java中的:inheritanceTest.B中的m(java.lang.Number)不能覆盖inheritanceTest中的m(java.lang.Number)。返回类型int与void不兼容 我知道静态方法不涉及多态,因此我推断我的代码不可能覆盖。 这个编译器消息对我来说很奇怪。 据我所知,重写是多态的一部分。 我准备scjp,我害怕在熟悉的问题上犯错误。 请澄清这个问题。 我的预期行为 – 有关重载错误的消息 P.S1。 我已经阅读了关于静态覆盖的热门问题,我没有找到答案( P.S2。 据Pshemo回答: 这段代码: class Foo{ public static void m(Number n){ System.out.println(“Number A”); }; public static int […]

相当于C ++中的Java接口?

可能重复: 你如何在C ++中声明一个接口? 接口与c ++中的java一样? 我是一名学习C ++的Java程序员,我想知道C ++中是否存在类似Java接口的东西,即另一个类可以实现/扩展多个类的类。 谢谢。 ps新来这里告诉我,如果我做错了什么。

多态性 – 重载/覆盖

我知道这个问题已经在StackOverflow上完成,并且已经有很多问题已经发布。 我可能已经阅读了它们中的每一个但是,有这个令人唠叨的疑问 :我认为我理解重载很好,并且覆盖。 让我变形的是多态性。 例如, 这个问题的接受答案用shape.Draw()解释了这一点。 我很困惑这与Overriding有什么不同(其他时候我对它与Overloading的不同之处感到困惑)。 此外 – 多态性本质上是指从抽象类派生出来的吗? (我想我几乎所有关于这个主题的答案都使用了一个抽象的动物类,让一只猫和一只狗喵喵叫/吠:) 总之 ,我的问题是: 什么是多态性wrt重载和覆盖? 有人可以在没有抽象类的情况下解释多态性 – 谢谢! 重载/覆盖不是多态的子类型,是吗? 编辑添加第3个问题并修改第2个问题。