热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中两个不同的类继承接口,实例化接口方法时候代码大量重复怎么解决?

类似于这种interfaceAnimal{voidrun1();voidrun2();voidrun3();}classsheepimplem

类似于这种


 interface Animal
 {
 void run1();
 void run2();
 void run3();
}

class sheep implements Animal
{
public run1()
{
代码片段1
}

public run2()
{
代码片段2
}

public run3()
{
代码片段3
}
}

class pig implements Animal
{
public run1()
{
代码片段1
}

public run2()
{
代码片段2
}

public run3()
{
代码片段3
}
}

其中类sheep和pig中代码片段1、2、3分别是相同的
这个要怎么优化?在子类和接口中间加一层抽象类实现部分相同方法?

11 个解决方案

#1


对,你说的没错,加个抽象类,随便你实现几个方法,子类继承抽象类,如需改变,重写方法!

#2


适配器模式。

#3


既然代码片段都相同,何不设置一个非抽象类Animal来代替接口?

#4



public interface Test{
public default void run(){
System.out.println("default");
}
}

当某个接口的实现类对接口中的某个方法行为一致的时候可以考虑在接口中声明默认实现.
对于特殊子类再进行重写.

#5


楼主你不是很明白么?还问啥。

4楼的方法似乎jre1.8版本才支持。之前的版本接口是决不允许有实现方法的。

#6


#7


写一个类来实现Animal接口,然后让pig跟sheep继承这个类

#8


写一个抽象类实现实现Animal接口,然后让pig跟sheep继承这个类,这样做法是比较好的

#9


引用 3 楼 qq_25827845 的回复:
既然代码片段都相同,何不设置一个非抽象类Animal来代替接口?

我说得不够详细。。。其实Animal应该还有其他方法,这两个方法在子类中是不一样的

#10


引用 4 楼 rickylin86 的回复:

public interface Test{
public default void run(){
System.out.println("default");
}
}

当某个接口的实现类对接口中的某个方法行为一致的时候可以考虑在接口中声明默认实现.
对于特殊子类再进行重写.

涨姿势了,谢谢哈

#11


引用 5 楼 NewMoons 的回复:
楼主你不是很明白么?还问啥。

4楼的方法似乎jre1.8版本才支持。之前的版本接口是决不允许有实现方法的。

我只是有这个想法,还没实现,因为是要对公司代码进行重构,所以。。。

推荐阅读
author-avatar
yu2531958135
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有