我试图了解何时创建抽象接口很有用。
我知道如果你创建一个接口,那么这些方法必须是公共的,所以对服务来说很好。但是,如果服务是抽象接口会发生什么?那有意义吗?
如果我创建一个声明为抽象接口的服务并且某些方法是私有的,那么实现此接口的类会看到私有方法而另一个(另一个应用程序或类似的)看不到这个方法,对吗?
我这是一个纠正的实施?
最后在很多人可以按我的错误睡觉后,我写了我的解决方案,等待等等。
package cat.base.gpt.domini;
public interface IExpMS extends Serializable{
... methods here..
}
public interface IExpMSDetallGIM extends IExpMS {
more methods here..
}
public interface IExpMSDetallOGC extends IExpMS{
..no methods just inheritance.
}
package cat.base.gpt.domini.impl;
import cat.base.gpt.domini.IClauExpedient;
import cat.base.gpt.domini.IExpMS;
public class ExpMS implements IExpMS{
..atributs and @overide methos interface
}
public class ExpMSDetallGim extends ExpMS implements IExpMSDetallGIM {..}
public class ExpMSDetallOGC extends ExpMS implements IExpMSDetallOGC {..}
*每种方法都是公开的,atributs是私有的。也许我可以在受保护的接口中编写方法,但我不确定...如果有人需要查看完整的代码,我无法通过电子邮件发布或发送。
如果ypu想看到数据库视图来考虑我的解决方案,那么:
![IExpMSDetallGIM 4
TY。
答案 0 :(得分:3)
接口总是抽象的。他们定义了一个类的interface
,所以他们只关注公共方法,不管语言如何。我想。
虽然私有方法是实现细节而不是接口,但它们不能在接口中声明。
如果希望私有方法在一组类中相同,则可以使用受保护的方法创建基本抽象类。
摘要表示“您无法创建此类型的成员”。
接口只是某些类属性的描述。它们总是抽象的,而您无法创建接口的实例。
查看链接http://www.ronaldwidha.net/2008/06/16/a-good-example-of-abstract-class-vs-interface/ - 它描述了C#中的代码,但它是相同的,只有关键字不同。
答案 1 :(得分:2)
我正在使用java ..是一样的吗?so interface = abstract interface?
在Java 7中,是的。在Java 7(或更早版本)中,interface
是隐式抽象的。接口本身不包含它指定的任何方法的主体,因此创建实例没有任何意义。
在Java 8中,可以在default
中包含interface
个方法。这些默认方法具有包含可执行代码的主体,但(当然)它们不能直接引用实例的状态。 (实例状态变量在实现接口的类中声明...而default
方法不能引用那些没有,也可能不会被声明的东西。)
但是,您仍然无法创建Java 8 interface
的实例,因此在abstract
类是抽象的意义上它仍然是抽象的。
然后你问这个:
如果我创建一个声明为抽象接口的服务并且某些方法是私有的,那么实现此接口的类会看到私有方法而另一个(另一个应用程序或类似的)看不到这个方法,对吗?
这是正确的......但它与abstract
关键字在Java中的含义无关。实际上,这就是描述所有Java类的行为......相对于private
成员的可见性。
答案 2 :(得分:2)
接口的主要目的是允许多个“同一件事”的不同实现。接口的用户不依赖于特定的实现,这允许良好的关注点分离。可以在以后添加新的实现,并且可以扩展程序,而无需修改使用它们的代码。
想象一下如何编写一个程序来汇总来自各种数据源的数字。您可以为每种类型的数据源(例如csv,xls,数据库表)编写一个单独的程序。但随后,将重复“总结”逻辑。如果要添加新的数据源类型,则必须从头开始编写整个程序。
接口允许更灵活。你意识到,你的总结逻辑需要在一个数字列表上运行。它并不关心这些数字的来源。所以你定义了一个接口:
interface NumberListProvider {
List<Double> readNumbers();
}
然后,您使整个复杂算法仅依赖于此接口,并提供不同的实现(具体类),从csv,xls或各种数据库中读取数字。