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

wu9333 2016-08-27 03:47:38

类似于这种


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分别是相同的
这个要怎么优化?在子类和接口中间加一层抽象类实现部分相同方法?
...全文
578 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
随便弄弄 2016-08-29
  • 打赏
  • 举报
回复
写一个抽象类实现实现Animal接口,然后让pig跟sheep继承这个类,这样做法是比较好的
今天晴 2016-08-29
  • 打赏
  • 举报
回复
写一个类来实现Animal接口,然后让pig跟sheep继承这个类
sky_08_06_02 2016-08-29
  • 打赏
  • 举报
回复
wu9333 2016-08-29
  • 打赏
  • 举报
回复
引用 5 楼 NewMoons 的回复:
楼主你不是很明白么?还问啥。 4楼的方法似乎jre1.8版本才支持。之前的版本接口是决不允许有实现方法的。
我只是有这个想法,还没实现,因为是要对公司代码进行重构,所以。。。
wu9333 2016-08-29
  • 打赏
  • 举报
回复
引用 4 楼 rickylin86 的回复:

public interface Test{
	public default void run(){
		System.out.println("default");
	}
}
当某个接口的实现类对接口中的某个方法行为一致的时候可以考虑在接口中声明默认实现. 对于特殊子类再进行重写.
涨姿势了,谢谢哈
wu9333 2016-08-29
  • 打赏
  • 举报
回复
引用 3 楼 qq_25827845 的回复:
既然代码片段都相同,何不设置一个非抽象类Animal来代替接口?
我说得不够详细。。。其实Animal应该还有其他方法,这两个方法在子类中是不一样的
rickylin86 2016-08-28
  • 打赏
  • 举报
回复

public interface Test{
	public default void run(){
		System.out.println("default");
	}
}
当某个接口的实现类对接口中的某个方法行为一致的时候可以考虑在接口中声明默认实现. 对于特殊子类再进行重写.
NewMoons 2016-08-28
  • 打赏
  • 举报
回复
楼主你不是很明白么?还问啥。 4楼的方法似乎jre1.8版本才支持。之前的版本接口是决不允许有实现方法的。
温柔狠角色 2016-08-27
  • 打赏
  • 举报
回复
既然代码片段都相同,何不设置一个非抽象类Animal来代替接口?
tiantianxiecode 2016-08-27
  • 打赏
  • 举报
回复
适配器模式。
I,Frankenstein 2016-08-27
  • 打赏
  • 举报
回复
对,你说的没错,加个抽象类,随便你实现几个方法,子类继承抽象类,如需改变,重写方法!

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧