这将是视频中的一种方法,其中IMedia界面可以是视频,文章或录制。只有视频和文章使用“名称”字段。
// is the name of this Video the same
// as that of the given IMedia?
public boolean sameCorporation(IMedia that) {
return (this.name == that.name);
}
我知道“this.name == that.name”不起作用,因为界面似乎不知道如何解决。
接口只包含方法主体
//to represent different types of news media
interface IMedia {
// compute the length of this IMedia
int length();
// formats the title, corporation, and episode number of IMedia
String format();
// is the corporation of this media the same
// as the corporation of the given media?
boolean sameCorporation(IMedia that);
}
答案 0 :(得分:3)
IMedia
可能没有name
字段,子类可以。所以你必须投,但这是一个糟糕的设计。
您可以拥有新界面
public interface Nameable {
public String getName();
}
你的另一个扩展了
public interface IMedia extends Nameable {
// other stuff
}
你有一些名字字段的课程
public class Video implements IMedia {
private String name;
public String getName() {
return this.name;
}
// Video things
}
某些没有名称仍然实现IMedia的类,只为getName()
返回null。
你的比较方法应该没问题
public boolean sameCorporation(IMedia that) {
// compare strings correctly, avoid nullpointer
return that != null && Objects.equals(this.name, that.getName());
}
此时可能最好使用抽象类。
public interface IMedia extends Nameable {
// other stuff
boolean sameCorporation(IMedia that);
}
public abstract class AbstractMedia implements IMedia {
public abstract String getName();
public boolean sameCorporation(IMedia that) {
return that != null && Objects.equals(this.getName(), that.getName());
}
}
答案 1 :(得分:1)
您可以在界面getName()
中添加IMedia
方法。
interface IMedia {
String getName();
int length();
String format();
boolean sameCorporation(IMedia that);
}
然后,你可以通过调用这个新方法进行比较。
public boolean sameCorporation(IMedia that) {
return this.getName() == that.getName();
}
鉴于只有Video
和Article
才有名称。您可以在Recording.getName()
方法中返回null。
答案 2 :(得分:1)
接口没有属性。它们仅提供在类中实现的方法声明。因此,在您的情况下,IMedia
接口应该声明方法getName
或类似的东西。
public interface IMedia {
String getName();
//...
//Your other methods
}
你说只有文章和视频有名字。所以你可以定义另一个扩展IMedia
的interace。
public interface INamedMedia extends IMedia {
String getName();
}
然后,您的Video
和Article
课程可以实施INamedMedia
。
我在这里看到的第二件事。 name
可能是一个字符串。你永远不应该将字符串与==
进行比较。请改用equals
方法。
this.getName().equals(that.getName())