Java 使用抽象接口的实际情况?

Java 使用抽象接口的实际情况?,java,interface,Java,Interface,我试图理解创建一个抽象接口什么时候有用 我知道,如果您创建一个接口,那么方法必须是公共的,这对于服务来说是很好的。但若服务是一个抽象接口,那个么会发生什么呢?这有意义吗 如果我创建了一个服务声明的抽象接口,并且一些方法是私有的,那么实现这个接口的类会看到私有方法,而另一个(其他应用程序的或类似的)不会看到这个方法,对吗 我想这是一个正确的实现 最后,在很多人都认为是我的错让我睡不着之后,我写下了我的解决方案,等待 package cat.base.gpt.domini; public inter

我试图理解创建一个抽象接口什么时候有用

我知道,如果您创建一个接口,那么方法必须是公共的,这对于服务来说是很好的。但若服务是一个抽象接口,那个么会发生什么呢?这有意义吗

如果我创建了一个服务声明的抽象接口,并且一些方法是私有的,那么实现这个接口的类会看到私有方法,而另一个(其他应用程序的或类似的)不会看到这个方法,对吗

我想这是一个正确的实现

最后,在很多人都认为是我的错让我睡不着之后,我写下了我的解决方案,等待

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  {..}
*每种方法都是公开的,而房舍是私人的。也许我可以在受保护的接口中编写方法,但我不太确定……如果有人需要查看完整的代码,我无法发布或通过电子邮件发送

如果ypu想查看数据库视图来考虑我的解决方案,这里有:

![IExpMSDetallGIM


接口总是抽象的。它们定义了类的
接口,因此我认为它们只涉及公共方法,而不考虑语言

虽然私有方法是实现细节而不是接口,但它们不能在接口中声明

如果希望私有方法在一组类中相同,可以使用受保护的方法创建一个基本抽象类

抽象表示“无法创建此类型的成员”

接口只是一些类属性的描述。它们总是抽象的,而您无法创建接口的实例

看看这个链接——它用C#描述代码,但它是一样的,只是关键字不同


我正在使用java..是相同的吗?那么接口=抽象接口

在Java 7中,是的。在Java 7(或更早版本)中,
接口
是隐式抽象的。接口本身不包含它指定的任何方法的主体,因此创建实例是没有意义的

在Java 8中,可以在
接口中包含
default
方法。这些默认方法的主体中包含可执行代码,但(自然)它们不能直接引用实例的状态。(实例状态变量是在实现接口的类中声明的,
default
方法不能引用未声明的内容,也可能永远不会声明。)

但是,您仍然无法创建Java 8
接口的实例,因此它仍然是抽象的,因为
抽象的
类是抽象的

然后你会问:

如果我创建了一个服务声明的抽象接口,并且一些方法是私有的,那么实现这个接口的类会看到私有方法,而另一个(其他应用程序的或类似的)不会看到这个方法,对吗


这是正确的……但这与Java中的
抽象词的含义无关。事实上,这描述了所有Java类的行为……相对于
私有成员的可见性。

接口的主要目的是允许“同一事物”的多个不同实现。接口的用户不依赖于特定的实现,这允许很好地分离关注点。以后可以添加新的实现,并且可以扩展程序,而无需修改正在使用它们的代码

想象一下,您将如何编写一个程序来汇总来自各种数据源的数字。您可以为每种类型的数据源(例如csv、xls、数据库表)编写一个单独的程序。但是,随后,“汇总”逻辑将重复。如果您想添加新的数据源类型,您必须从头开始编写整个程序

接口使其更加灵活。您意识到,您的求和逻辑需要对数字列表进行操作。它不关心这些数字来自何处。因此,您定义了一个接口:

 interface NumberListProvider {
     List<Double> readNumbers();
 }
interface NumberListProvider{
列出ReadNumber();
}

然后,使整个复杂算法仅依赖于此接口,并提供不同的实现(具体类),读取csv、xls或各种数据库中的数字。

不确定您的语言,但接口是抽象的。我正在使用java..是一样的吗?那么接口=抽象接口?java有抽象接口吗?它是抽象类。此外,私有方法不能被重写-因为Z不“可见”任何其他类,除了定义它的类…这很难理解…我需要阅读更多,所以如果我想私有方法需要是一个抽象类…看看我刚才添加的链接。ty,我希望有一天能帮助你。