项目需要,没时间学java >_< 有个问题请教大家,关于基类和接口同一方法名

android2012 2010-05-20 07:51:32
class Base
{
public void foo();
}

interface IBase
{
public void foo();
}

class D extends Base implements IBase
{
public void foo()
{
}
}

现在我需要在D中分别有两个方法来重载Base和IBase的foo,应当如何?
...全文
197 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleJP 2010-05-21
  • 打赏
  • 举报
回复
这在Java中不能实现的吧……
android2012 2010-05-20
  • 打赏
  • 举报
回复
要是方法名可以随便改,多态还多态得起来吗?麻烦您。。。。
android2012 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 werosh 的回复:]
引用 9 楼 android2012 的回复:
假设有一种情况,你的类需要实现两个接口,这两接口里有一方法完全一样,但所提供的服务是不一样的。
我想这情况应该很常见吧?

楼上那些说改个方法名的同学,现实里并不是所有都是你设计的。

这话让人听着太不舒服了,好心顶你问题,换回一句说教
[/Quote]
笑话,假如换个情况是两个接口同一方法名呢?
谢谢您的好心,不过对我没用。
werosh 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 android2012 的回复:]
假设有一种情况,你的类需要实现两个接口,这两接口里有一方法完全一样,但所提供的服务是不一样的。
我想这情况应该很常见吧?

楼上那些说改个方法名的同学,现实里并不是所有都是你设计的。
[/Quote]
这话让人听着太不舒服了,好心顶你问题,换回一句说教
werosh 2010-05-20
  • 打赏
  • 举报
回复
那你不会自己解释一下啊,先继承别人写的类,把方法改个名,你自己在继承新类不就得了
android2012 2010-05-20
  • 打赏
  • 举报
回复
假设有一种情况,你的类需要实现两个接口,这两接口里有一方法完全一样,但所提供的服务是不一样的。
我想这情况应该很常见吧?

楼上那些说改个方法名的同学,现实里并不是所有都是你设计的。
android2012 2010-05-20
  • 打赏
  • 举报
回复
public abstract class Base
{
public abstract void foo();
}

public interface IBase
{
void foo();
}

public class D : Base, IBase
{

public override void foo()
{
MessageBox.Show("Base::foo");
}
public void IBase.foo()
{
MessageBox.Show("IBase::foo");
}
}

这是c#的方法

c++也是类似 Base::foo IBase:foo,难道java没有相应的机制??
非典型射手 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 android2012 的回复:]

引用 3 楼 werosh 的回复:
你要实在要2个方法,那就给其中一个带上个参数,用的时候参数传null就是了。

Java code
class Base
{
public void foo();
}

interface IBase
{
public void foo(Object b);
}

class D extends Base implements I……

拜托,如果基类和接口不是我所定义的呢?
[/Quote]

方法名一样,所代表的业务含义也应该一样,所以实现成一个方法也未尝不可。
如果业务含义不一样的话,建议还是分开实现。

另外,不了解实际的需求,不敢妄自下结论
keeya0416 2010-05-20
  • 打赏
  • 举报
回复
貌似没哪个语言有这个特性吧
很肯定的说是没招了
android2012 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 werosh 的回复:]
你要实在要2个方法,那就给其中一个带上个参数,用的时候参数传null就是了。

Java code
class Base
{
public void foo();
}

interface IBase
{
public void foo(Object b);
}

class D extends Base implements IBase
{
public……
[/Quote]

拜托,如果基类和接口不是我所定义的呢?
龙四 2010-05-20
  • 打赏
  • 举报
回复
你只用写一个方法。。。。。

否则就不要重名
werosh 2010-05-20
  • 打赏
  • 举报
回复
你要实在要2个方法,那就给其中一个带上个参数,用的时候参数传null就是了。
class Base
{
public void foo();
}

interface IBase
{
public void foo(Object b);
}

class D extends Base implements IBase
{
public void foo()
{
}
public void foo(Object b)
{
}
}
D d = new D()
d.foo();
d.foo(null);


android2012 2010-05-20
  • 打赏
  • 举报
回复
就是说,java对此不支持?
rumlee 2010-05-20
  • 打赏
  • 举报
回复
只会有一个方法,如果你希望是两个方法,要么名称不同,要么参数列表不同。

同一个方法,通过基类或者接口访问,访问的都是同一个方法。
lihui820905 2010-05-20
  • 打赏
  • 举报
回复
第一,你的 D 类相对于 Base 类来说,是重写。
第二,你的 D 类相对于 IBase 接口来说,是实现。
第三,你的 Base 类的 foo 方法不能没有内容,因为不是抽象方法。

看来你确实没时间学java。你要重写Base的foo方法,同时实现IBase的foo方法,就像你写的那样就OK了,只要将Base类和其foo方法都弄成抽象的,或者在Base的foo方法里加点内容。

不过我不大明白你要这样做的目的。还是说下你的实际需求,让大家看看怎么帮你解决。
非典型射手 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 android2012 的回复:]

假设有一种情况,你的类需要实现两个接口,这两接口里有一方法完全一样,但所提供的服务是不一样的。
我想这情况应该很常见吧?

楼上那些说改个方法名的同学,现实里并不是所有都是你设计的。
[/Quote]

既然提供的服务都不一样,为什么还要用一个类来实现这两个接口?

62,623

社区成员

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

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