我有一个方法findNearest,用于查找距离对象最近Object的点ArrayList.
但是我希望能够为不同类的ArrayLists调用方法,这些类是我的基类的超类 Entity
例如,Tree是一个子类Entity,按原样Worker.我希望能够findNearest(x,y,<Arraylist of Trees>)
和也findNearest(x,y,<Arraylist of Workers>)
我想我可以使用一个接口来实现这一点,但是有更简单/更清晰的方法吗?
谢谢
邓肯
我一直想知道为什么允许在接口中执行代码实现,当接口被假定为不包含代码实现时:
public interface someInterface{
String someString = "example";
}
Run Code Online (Sandbox Code Playgroud)
我可以使类实现此接口,而不会出现错误:
public class someClass implements someInterface
Run Code Online (Sandbox Code Playgroud)
怎么会?
以下是我试图运行的代码,输出是Good.那么,我们可以使用一个类实现的接口变量吗?
interface IDummyInterface {
public String TYPE = "Good";
}
class Test implements IDummyInterface {
}
public class MyApplication {
public static void main(String[] args) {
System.out.println(Test.TYPE);
}
}
Run Code Online (Sandbox Code Playgroud) 我知道实现某些类的每个类Interface都必须覆盖它的所有方法.除非当前的课程是abstract.
正如您所见,在下面提到的代码模板中演示了这一点.
在我的情况下只ChildClass覆盖foo()方法.
接口
public interface MyItf {
public void foo();
}
Run Code Online (Sandbox Code Playgroud)
家长班
public abstract class ParentClass implements MyItf {
}
Run Code Online (Sandbox Code Playgroud)
儿童班
public class ChildClass extends ParentClass{
@Override
public void foo() {
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个实现要求我设置ParentClass类abstract.
如果我想离开ParentClass单班而不抽象怎么办?
有没有人有其他方式只有孩子使用MyItf而不是父类?
谢谢,
[编辑]
基于所有答案我在我的案例中找到了解决方案:
我编写了一个游戏,我有140个子类.
为了使代码更灵活,我需要创建"空"接口并允许所有孩子实现它,如:
public interface UnknownItf {
}
Run Code Online (Sandbox Code Playgroud)
所以下次如果我需要为孩子们添加新界面,我会写:
public interface UnknownItf extends NewItf{
///...
}
Run Code Online (Sandbox Code Playgroud) 这是我有三个接口的代码
interface i1{
int x=1;
}
interface i2{
int x=2;
}
interface i3{
int x=3;
}
class A implements i1,i2,i3{
system.out.println(x); // It shows Field is ambgous
}
Run Code Online (Sandbox Code Playgroud)
如何回答这个或如何克服这个问题.
我正在阅读集合以查看Javadocs的实现层次结构.
Collections 被宣布为 public class Collections extendds Object
Collection<E> 被宣布为 public interface Collection<E> extends Iterable<E>
AbstractCollection 被宣布为 public abstract class AbstractCollection<E> implements Collection<E>
AbstractList 被宣布为 public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
我的问题是1)之间是否存在任何联系Collections and Collection.我什么都没看到extending Collections Class?
2)什么是需要AbstractList一流的,因为在实现的方法AbstractList,如类listIterator可能以及在抽象List Interface和实现类可能以及实现这样的方法?
在c中,抽象方法必须由子类实现.所以我的问题是当接口继承另一个接口时为什么它不实现所有基接口成员.
public interface IShape
{
void Points();
}
public interface ICircle: IShape
{
void IsDrawAble();
}
Run Code Online (Sandbox Code Playgroud)
当我在Visual Studio 2010中运行此程序时,没有出现任何错误.根据定义,ICircle必须实现Points函数.
谢谢
我有多个具有共同功能的类,由于各种原因,它们的实现方式不同.我在相同的上下文中使用所有这些类,但我不知道在运行时将使用哪一个.我想实例化不同的类,但使用相同的代码行来调用常用功能.
所以,我虽然使用继承(显然),现在我的代码看起来像这样:
class Base():
def common(self):
return "abstract"
class A(Base):
def common(self):
return "A"
class B(Base):
def common(self):
return "B"
Run Code Online (Sandbox Code Playgroud)
我希望能够将任何派生类实例化为Base(这样我就不必特殊情况并检查我添加的每个新类)并调用它的common方法并获得所需的"A"或"B" "结果.
目前我正在使用通用接口来声明像这样的IoC依赖:
public interface IComposition<T>
{
T Dependency { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但碰巧我的实现可能同时具有多个依赖项.
我知道这很荒谬,但只是让你们明白我需要的东西......让我说我多次实现界面来解决我的问题:
public class MyClass : IComposition<TypeA>, IComposition<TypeB>
{
...
}
Run Code Online (Sandbox Code Playgroud)
我相信使用IComposition<T1, T2, ...>或ITypeXDependent每种类型的一个不是很好的选择.我的核心需要使用反射在运行时解决依赖关系.所以,这就是为什么我不通过构造函数传递依赖项.
有谁知道一些可以帮助我的技巧?
我有一个名为BST的Java接口(二进制搜索树的简称),它具有泛型类型Key,Value,其中Key扩展为Comparable.我将其定义如下.
public interface BST<Key extends Comparable<Key>,Value> {
public void put(Key key,Value value);
public Value get(Key key);
public void delete(Key key);
public Iterable<Key> keys();
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义上面接口的实现.我试过这个
public class BSTImpl<Key extends Comparable<Key> ,Value> implements BST<Key extends Comparable<Key>,Value> {
...
}
Run Code Online (Sandbox Code Playgroud)
上面的定义在eclipse IDE中导致错误信息. extends后面的令牌implements BST<Key似乎是罪魁祸首
令牌"extends"的语法错误,预期
如果我从定义中省略"extends"标记(如下所示),则错误消失,我可以通过eclipse正确生成未实现的方法
public class BSTImpl<Key extends Comparable<Key> ,Value> implements BST<Key ,Value> {
@Override
public void put(Key key, Value value) {
// TODO Auto-generated method stub
}
@Override
public Value get(Key key) {
// TODO Auto-generated …Run Code Online (Sandbox Code Playgroud)