我有一个接口Readable
,我有一个实现它的类ReadableImpl
。
public interface Readable {
void doThis();
void doThat();
}
public class ReadableImpl implements Readable {
public void doThis() {
System.out.println("do this");
}
public void doThat() {
System.out.println("do that");
}
}
如果我想覆盖方法doThis()
该怎么办?我应该在另一个班级中实施Readable
吗?
修改:我不想编辑课程ReadableImpl
答案 0 :(得分:1)
从技术上讲,您正在ReadableImpl
中实施(有些人称之为覆盖)。如果要再次覆盖,则必须在扩展ReadableImpl
的类中,并且无需再次实现Readable
。简单地说,
public class ReadableImpl2 extends ReadableImpl {
@override
public void doThis() {
System.out.println("do this overriden");
}
}
答案 1 :(得分:0)
你的例子已经覆盖了它!
您可以直接覆盖课程doThis()
中的ReadableImpl
。
只要在类中实现接口,就可以通过在该类中编写完全相同的方法名/返回类型/参数来覆盖接口中的任何方法。
答案 2 :(得分:0)
这取决于您需要做什么,以及您需要与ReadableImpl
的兼容程度。
您可以继承ReadableImpl
并覆盖doThis
:
public class ReadableImpl2 extends ReadableImpl {
@override
public void doThis() {
System.out.println("do this 2");
}
}
如果您无权访问实例,则可以使用代理:
public class ReadableProxy implements Readable {
private final Readable delegate;
public ReadableProxy(Readable delegate) {
this.delegate = delegate;
}
public void doThis() {
System.out.println("do this proxy");
}
public void doThat() {
delegate.doThat();
}
}
答案 3 :(得分:0)
你的问题
如果我想覆盖方法doThis(),我该怎么办?我是不是该 在另一个类中实现Readable?
我认为并不是很清楚,因为在与extend / implements相关的操作命名中有一些混合。因此,让我试着回答你的问题,解释一下使用你的例子:
public interface Readable {
void doThis();
void doThat();
}
有了这样的界面,您可以使用implement
关键字{/ 1>}在您选择的类中选择其方法
implements
现在,如果你想public class ReadableImpl implements Readable {
public void doThis() {
System.out.println("do this");
}
public void doThat() {
System.out.println("do that");
}
}
这种方法,唯一的方法是创建一个override
extends
的新类,因为ReadableImpl
意味着在子类中更改父类方法的功能:
to override
但是如果你想要一种完全不同的处理方式,public class ReadableImplChild extends ReadableImpl{
@Override
public void doThis() {
System.out.println("do this more specific way");
}
@Override
public void doThat() {
System.out.println("do that more specific way");
}
}
处理ReadableImpl
接口方法,你应该创建一个新类,它将{{1此界面引入新功能
Readable
你可以(我知道你不想,但你可以)implement
一种方法。并且它意味着创建相同功能的新版本,该功能仅与方法参数的数量和/或类型不同
public class ReadableTotallyDifferentImpl implements Readable {
public void doThis() {
System.out.println("do this totally another way");
}
public void doThat() {
System.out.println("do that totally another way");
}
}
根据你提问:
如果我想覆盖方法doThis(),我该怎么办?
嗯,这取决于:
overload
课程,但你希望这种方法的工作方式不同,你可以重载
或更改其实施