【发布时间】:2015-03-14 05:05:41
【问题描述】:
所以,我试图理解一个 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);
}
}
}
非常感谢任何帮助!
【问题讨论】:
-
Related-ish question 在 Programmers SE 上。基本上语义可能是一个原因。
-
我想将来有人可能会决定
A没有必要实现Idump;如果B有自己的Idump方法实现,但有人从A中删除了implements Idump,它将破坏B,除非B也表示implements Idump。但这似乎是一个非常模糊的原因,因为这将是一个重大的设计更改,而且如果B在它实现的方法上使用@Override注释,那么编译器无论如何都会捕获它。
标签: java inheritance superclass