两个具有相同方法名称和签名的接口.但是由单个类实现,那么编译器将如何识别哪个接口的方法是什么?
例如:
interface A{
int f();
}
interface B{
int f();
}
class Test implements A, B{
public static void main(String... args) throws Exception{
}
@Override
public int f() { // from which interface A or B
return 0;
}
}
Run Code Online (Sandbox Code Playgroud) 那么,明确实现接口的一个好用例究竟是什么?
是否仅仅是因为使用该类的人不必在intellisense中查看所有这些方法/属性?
如果我有两个接口,两者的用途完全不同,但是使用相同的方法签名,我如何在不强制编写一个为两个接口服务的单个方法并在方法中编写一些复杂逻辑的情况下创建一个类.检查正在进行调用的对象类型并调用正确代码的实现?
在C#中,这被称为显式接口实现所克服.Java中有没有相同的方法?
在Java中,是否有一种方法(在运行时)获取定义特定类的字节码?
换句话说,有没有办法获取在加载特定类时byte[]传递给的数组ClassLoader.defineClass(String name, byte[] b, int off, int len)?我看到声明了这个方法final,因此创建一个ClassLoader拦截类定义的自定义似乎是不可能的.
在过去,我已经使用类ClassLoader来通过该getResourceAsStream(String)方法获取字节码,但我更喜欢更规范的解决方案.
我实现Map<V,K>和Collection<V>接口在一类,但remove(Object)发生法两种接口,therfore日食表明了我的一些错误.返回类型是不同的,一个返回boolean,另一个V但这似乎并不重要.
有没有办法告诉java/eclipse哪个方法实际被覆盖?
编辑:我有一个所有值必须实现的接口,它使用getKey()方法提供值,从而可以为地图编写添加函数.但似乎没有办法让这一个类同时看作地图和集合?
我有来自两家公司asoft和bsoft的代码.我也无法改变.这是我的情况的简化版本,我非常确定有足够的信息来查找导致问题的原因.
bsoft提供IGang,代表一个可以与其他帮派作战的团伙.
package bsoft;
public interface IGang {
/** @return negative, 0, or positive, respectively
* if this gang is weaker than, equal to, or stronger
* than the other
*/
public int compareTo(IGang g);
public int getStrength();
public String getName();
public void attack(IGang g);
public void weaken(int amount);
}
Run Code Online (Sandbox Code Playgroud)
asoft提供GangWar,允许IGangs战斗:
package asoft;
import java.util.*;
import bsoft.*;
/** An `IGang` ordered by identity (name) */
public interface ComparableGang extends IGang, Comparable<IGang> {}
package asoft; …Run Code Online (Sandbox Code Playgroud) java ×5
interface ×4
overriding ×2
bytecode ×1
c# ×1
collections ×1
composition ×1
implements ×1
map ×1
runtime ×1
set ×1