所以,我试图理解一个Java项目,其中有一个接口,然后是一个带有子类B,C和D的A类,每个子类都有各自的子类数。
我注意到一些子类扩展了它们给定的超类并实现了接口,而其他子类只是扩展了它们的超类。此外,例如类B的一些子类将声明一个方法,该方法也在类B和类A中声明,并在接口中使用。
我的问题是 - 在辅助子类中实现接口的目的是什么,如果扩展它们允许它们继承其超类的属性,从而实现接口呢?
我知道我的逻辑必须是有缺陷的并且必须有一个理由,因为有些辅助子类实现了接口,而其他子类则没有。
这是实现Idump的示例,而其他一些也包含不实现Idump的dumpProperties方法。 :
public class Q extends B implements Idump {
public void dumpProperties(StringBuffer buf)
{
String appearance = "1";
String dumpValue = "Sizable";
buf.append("\t\t\t//\n");
buf.append("\t\t\t// " + name + "\n");
buf.append("\t\t\t//\n");
buf.append("\t\t\tthis." + (owner != null ? name + "." : "") + "Name = \"" + name + "\";\n");
}
public class B extends A implements Idump {
public void dumpProperties(StringBuffer buf)
{
super.dumpProperties(buf);
for(Control control : controls)
{
control.dumpProperties(buf);
}
}
}
public class A implements Idump{
public void dumpProperties(StringBuffer buf)
{
buf.append("\t\t\t//\n");
buf.append("\t\t\t// " + name + "\n");
buf.append("\t\t\t//\n");
buf.append("\t\t\tthis." + (owner != null ? name + "." : "") + "Name = \"" + name + "\";\n");
for(Property prop : properties)
{
prop.dump(buf);
}
if(left != -1 && top != -1 )
{
buf.append("\t\t\tthis." + name + ".Location = new System.Drawing.Point(" + left + "," + top + ");\n");
}
if(width != -1 && height != -1 )
{
buf.append("\t\t\tthis." + name + ".Size = new System.Drawing.Size(" + width + "," + height + ");\n");
}
for(Property prop : properties)
{
prop.dumpProperties(buf);
}
}
}
非常感谢任何帮助!
答案 0 :(得分:2)
就编译器而言,绝对没有区别。出于可读性原因,这可以作为一种标记interface
来完成。
答案 1 :(得分:2)
如果子类没有明确地包含一个实现,那么它将继承它的一个实现。父母;请注意,这意味着其他子类(显式实现它)将覆盖父项的实现(这称为Polymorphism)。
同样,每个子类都将继承其“'超类工具(它们是否也标记为实现接口);这是一种风格和可读性的决定。