实现某些子类而不是其他子类的目的?
Purpose of implementing some subclasses and not others?
所以,我试图理解一个 Java 项目,其中有一个接口,然后是一个 class A 和子 classes B、C 和 D,每个其中有各自数量的 subclasses。
我注意到一些 subclasses 扩展了它们给定的 superclass 并实现了接口,而其他的只是扩展了它们的 superclass。此外,例如 class B 的一些子 classes 将声明一个方法,该方法也在 class B 和 class A 中声明,并使用在界面中。
我的问题是 - 如果扩展它们允许它们继承其超classes 的属性并因此实现有界面吗?
我知道我的逻辑一定是有缺陷的,而且一定是有原因的,因为一些次级子class实现了接口,而另一些则没有。
这是一个实现 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);
}
}
}
非常感谢任何帮助!
就编译器而言,绝对没有区别。出于可读性原因,可以将其作为一种标记 [=10=].
如果子class没有明确包含一个实现,那么它将从它的父级继承;请注意,这意味着其他子 classes(明确实现它)正在覆盖父级的实现(这称为 Polymorphism)。
同样,每个sub-class都会继承它的super-class实现的接口(无论它们是否也被标记为实现接口);这是一种风格和可读性的决定。
所以,我试图理解一个 Java 项目,其中有一个接口,然后是一个 class A 和子 classes B、C 和 D,每个其中有各自数量的 subclasses。
我注意到一些 subclasses 扩展了它们给定的 superclass 并实现了接口,而其他的只是扩展了它们的 superclass。此外,例如 class B 的一些子 classes 将声明一个方法,该方法也在 class B 和 class A 中声明,并使用在界面中。
我的问题是 - 如果扩展它们允许它们继承其超classes 的属性并因此实现有界面吗?
我知道我的逻辑一定是有缺陷的,而且一定是有原因的,因为一些次级子class实现了接口,而另一些则没有。
这是一个实现 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);
}
}
}
非常感谢任何帮助!
就编译器而言,绝对没有区别。出于可读性原因,可以将其作为一种标记 [=10=].
如果子class没有明确包含一个实现,那么它将从它的父级继承;请注意,这意味着其他子 classes(明确实现它)正在覆盖父级的实现(这称为 Polymorphism)。
同样,每个sub-class都会继承它的super-class实现的接口(无论它们是否也被标记为实现接口);这是一种风格和可读性的决定。