Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是设计问题还是Eclipse';s发行或Java';什么是漏洞?_Java_Eclipse_Class Design - Fatal编程技术网

这是设计问题还是Eclipse';s发行或Java';什么是漏洞?

这是设计问题还是Eclipse';s发行或Java';什么是漏洞?,java,eclipse,class-design,Java,Eclipse,Class Design,让我们在eclipse的工作空间中定义以下类: public abstract class A { public void foo() { System.out.println("Hi.. this is foo()"); } } public interface I { void foo(); } public class B extends A implements I { public void bark() { System.out.p

让我们在eclipse的工作空间中定义以下类:

public abstract class A {
   public void foo() {
      System.out.println("Hi.. this is foo()");
   }
}

public interface I {
   void foo();
}

public class B extends A implements I {
   public void bark() {
      System.out.println("Hi.. this is bark()");
   }
}

public class C {
   public void woo() {
      I i = new B();
      i.foo();
   }
}
现在的问题是eclipse在搜索时没有显示对A.foo()的任何引用

  • 参考->项目或
  • 引用-层次结构

我认为这是一个设计问题。你觉得怎么样?

听起来非常合理,因为你提供的代码
A
没有实现
I
,只有
B
实现。尽管在
B
声明中,代码读取
扩展A实现I
,但这并不意味着
A
将追溯实现接口
I
——它表示“B扩展A并实现I”。

在Eclipse中适用于我:

A a = new A() { };
a.foo(); // <-- A.foo() found this reference by Eclipse in "References -> Project"
aa=newa(){};

a、 foo();//这当然与eclipse如何查找引用有关。它不必与Java本身做任何事情……我不知道Eclipse方面的情况,但我觉得奇怪的是A没有声明为实现I。从技术上讲,这可能是合法的。实际上,正如Matthew所说,这让人感觉很肮脏,这可能是Eclipse的人员从未像这样实现smthn的原因……是的,即使我同意Matthew和TC1的观点。。这感觉很脏。。让抽象类A实现IYes是否更好,这是真的<代码>公共类C{public void woo(){I I=new B();I.foo();//无法从A.foo()找到引用,因为A尚未实现I B=new B();B.foo();//可以从A.foo()找到引用A A=new B();A.foo();//可以从A.foo()找到引用}
我认为我们应该避免这样设计。。也就是说,我们应该避免在一个独立的抽象类上编写具体的方法。让抽象类A实现IIB更好吗,接口I的实现来自类A。换句话说,A.foo必须满足I要求的契约,并且逻辑上,必须合理地说,A实现了I。代码是公共抽象类A,而不是公共抽象类A实现了I,因此A不实现I。在现有代码中,A未标记为实现I-确定。我想说,将A标记为实现I更符合逻辑。