假设我有两个类叫做classcow
adclasspig
。
它们都实现了接口动物
。
对于接口
只有两种方法,分别称为public void eat()
和public void speak()
。
一切都很好。但是,虽然这似乎很好地利用了接口
s,但我认为如果我需要向这个接口
添加方法,实现就会中断,即我需要去实现这些类中的新方法,这打破了“封闭-开放原则”。
所以我想,除了接口
,如果将来需要添加新方法,我还会使用抽象
类。
例如,公共类Cow扩展。。。实现动物
。
这听起来是个好计划(如果不是,请纠正我)。
但问题是,如果这些类扩展
已经有其他类了怎么办?在这种情况下,我不能扩展2个类。
所以我的问题是:
有没有一种模式可以让我声明一个相关类的公共接口
,同时保留将来添加新方法的能力,而不破坏“封闭-开放原则”,也不破坏实现?
在Java8中,接口可以为此定义默认方法。
对于Java8,有一些默认方法
public interface Animal {
void eat();
void speak();
default void sleep(){}
}
现在你的动物
必须覆盖吃
和说
,但可以选择覆盖睡眠
。
在Java 8之前,使用抽象类
是防止实现每个接口
方法的常用方法。正如您所指出的,这不适用于多重继承,因此不能用于解决所有情况。
注意:不要声明接口
方法公共
,这是所有接口
成员的默认可见性。
我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只需更改/usr/bin/Python以指向新版本。这显然是错误的,因为当我这样做的时候,它打破了百胜。我会得到以下内容。 我更改了/usr/bin/python以指向python 2.6.6,但现在2.6.6是python的默认版本。你知道怎么解
为了记录请求和响应,我添加了一个LoggingRequestInterceptor,它实现了ClientHTTPPrequestinterceptor。。。 响应主体是一个流,如果我将其读取到我的拦截器中,TestRestTemplate将无法将其反序列化到我的对象模型中。换句话说,当我调用testRestTemplate时。获取…我将始终获取空对象(即使我看到对象我的响应)。 要解决RestTe
本文向大家介绍Linux中在不破坏磁盘的情况下使用dd命令,包括了Linux中在不破坏磁盘的情况下使用dd命令的使用技巧和注意事项,需要的朋友参考一下 无论你试图从即将坏掉的存储驱动器抢救数据,将归档备份到远程存储,还是在别处对活动分区制作一份完美副本,都要知道如何安全可靠地复制驱动器和文件系统。幸好,有dd这款简单而强大的镜像复制工具,而且历史悠久。在这方面没有比它更出色的工具了。 dd命令的解
我已经创建了一个在视觉上类似于一张卡(游戏卡)的对象-一张顶部有图像的卡,下面有一些关于该卡的信息,包括文本和符号。页面上可以有许多卡片。 单击一张卡片会将用户带到一个新页面。这是通过使用href将所有卡片元素包装在一个div中完成的。每张卡都有一个带有一些选项的下拉菜单。最初的问题是,单击下拉菜单时,卡也会被单击。 我想在单击下拉菜单时阻止卡被单击。单击下拉菜单时,下拉菜单本身应正常运行。 hr
当我这样做的时候,变量'amount'不是正确的答案,因为a现在是,用pylint的话说是'tuple',所以amount将从返回a+4,变为返回(a,a+5)+4 我如何将'a+5'添加到foo中,同时仍然允许amount是单个标量值,而不是元组?
问题内容: Elasticsearch具有内置的“突出显示”功能,该功能可让您在结果中标记匹配的词(比起初听起来更复杂,因为查询语法可能包含接近匹配等)。 我有HTML字段,当我打开突出显示功能时,Elasticsearch会遍历整个HTML语法。 以这种方式突出显示时,是否可以使其支持HTML / HTML安全? 我希望突出显示应用于HTML文档中的文本,而不是突出显示与搜索匹配的任何HTML标