伙计们,我知道这个问题很愚蠢但只是为了确保:
在我的班级方法中:
boolean equals(Document d)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
我正在超载这种方法,也没有超越对吗?我知道这个或类似的问题将出现在即将发布的egzam上,如果没有得到这样一个简单错误的分数,那将是愚蠢的.
根据提供的代码,我们无法确定您是否超载或覆盖它.
您很可能重载该equals(Object o)方法.
class A {
void method() {..}
}
class B extends A {
// this is overriding
void method() {..}
}
Run Code Online (Sandbox Code Playgroud)
和
// this is overloading
class A {
void method(boolean b) {..}
void method(String arg) {..}
void method(int arg) {..}
}
Run Code Online (Sandbox Code Playgroud)
PS你正在使用一个在Java世界中没有被广泛接受的括号约定.在Java中,更常见的是将花括号放在同一个上.
你甚至没有超载,因为调用了另一种方法equals.但是,如果你添加它s,你将会超载equals.虽然,确切地说,如果在同一个类中定义了两个(或更多)具有相同名称但签名不同的方法,我们会谈论重载.在你的情况下,它更棘手,因为你equals的不同签名部分隐藏了原始equals.这通常是一件坏事,因为这几乎总会导致难以理解的行为,从而导致微妙的错误.每当有人调用equals您的类的实例时,根据参数类型,调用可能会转到该方法的不同实现.
class Document {
public boolean equals(Document d)
{
//do something
}
}
Document doc1 = new Document();
Document doc2 = new Document();
String string = new String();
doc1.equals(doc2); // calls Document.equals
doc1.equals(string); // calls Object.equals!
Run Code Online (Sandbox Code Playgroud)
Object.equals如果您使用与原始方法完全相同的签名定义您的方法,那么您将会重写,即
public boolean equals(Object obj) ...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,上述两个调用都能equals正确执行Document.equals.
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |