Java接口能不能有静态方法_关于oop:为什么java接口不能包含静态方法实现?

我只是好奇,允许接口包含静态方法的实现是否更方便?这些方法可以包含(由这个接口实现者)常用的简短逻辑。

因为他这么说!

脸部…手掌

为什么我不能在接口中声明静态方法的可能副本?

因为接口描述了什么。它没有描述如何。

如果您真的想在一个接口中添加(隐藏)一些逻辑,您可以考虑添加一个内部类(注意:永远不要这样做,这只是从纯粹的技术角度展示了什么是可能的):

public interface Person {

public String getFirstName();

public String getLastName();

public class Util {

public String getName(Person person) {

return person.getFirstName() +"" + person.getLastName();

}

}

}

如果您使用它,它"感觉"有点像在接口中有静态方法代码:

String fullName = Person.Util.getName(this);

正如我所说的,从技术上讲,这是纯粹的,我看不出任何实际的理由。静态方法可以位于任何类中,无需将其添加到接口中。

我同意静态方法在接口中没有意义。但我不明白为什么Java允许接口中的静态成员。似乎有点不一致。

接口是一种契约。它说明了实现对象将拥有什么(至少),但仅此而已。上面写着"这房子有门、窗户和烟囱"。

抽象类更像是预制房屋。它并不完整(例如,你必须添加你自己的壁板),但它已经有了部分(门有一个空间,但整个壁炉已经设置好了)。

在接口中提供代码的问题是多重继承。Java不允许这样做。您可以让一个类实现许多接口,因为接口只承诺有一个具有给定签名的方法。

如果接口包含代码,那么您可以实现其中的3个,每个接口都有一个myusefunction(string-thing)的方法体…现在你不知道该给谁打电话了。

这就是为什么抽象类可以有方法体(因为您只能扩展一个类),但接口不能(因为您可以实现多个接口)。

在静态方法的情况下,多重继承不会是一个问题,因为它们是在编译时解决的。因此,在静态调用不明确时引发编译错误是很简单的。

接口是具有所有抽象方法的特殊抽象类。

您可以自由地创建自己的抽象类,该类包含(非抽象)静态方法,但随后只能从其中一个方法继承。

更好的是,用静态方法创建一个单独的助手类。

抽象类或常规类应该实现一些东西。接口不应该有任何实现,但它们包含通信的接口。因此不允许使用静态方法。

我知道,我只是问为什么?

从任何实现细节中提取客户机代码。客户不应该为事情是如何完成而烦恼。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值