使用嵌套 Parent Class 和 Child Classes 处理继承 objects
Handling inheritance with Parent Class and Child Classes with nested objects
假设我有一个 class Child 扩展 Class Parent。 class Child 有两个嵌套的 classes nested1 和 nested2。我想在 Parent 中定义一个抽象函数,参数为 nested1,return 类型为 nested 2。现在,为了实现这一点,我创建了一个同时具有参数和 return 的函数输入 Object。
所以现在,当我实现 child class 时,我总是需要将 Object 转换为 nested1 和 nested2。我觉得会有更好的方法来实现这一目标。有没有更好的方法来降低复杂度?
同时附上UML
从打字的角度来看,最好的方法是在 parent class 中创建一个接口,指定 child 中嵌套的 classes。这样你就不需要将参数转换为 func。这不会降低复杂性 per-se 但它确实使您的意图更清晰并且 reduces/eliminates 需要转换(总是一件好事)。
public abstract class Parent {
interface Interface1 {
//Specifications of methods that all child nested classes must have
}
interface Interface2 {
//Specifications of methods that all child nested classes must have
}
public abstract Interface2 func(Interface1 obj);
}
public class Child extends Parent {
private static class Impl1 implements Interface1 {
//Implementations of methods in Interface1 as they pertain to Child
}
private static class Impl2 implements Interface2 {
//Implementations of methods in Interface2 as they pertain to Child
}
@Override
public Interface2 func(Interface1 obj) {
//Should only have to use methods declared in Interface1
//Thus should have no need to cast obj.
//Will return an instance of Impl2
return null;
}
}
在更广泛的范围内,您应该问自己为什么每个 child 都需要自己的一组嵌套 classes。如果您可以将嵌套的 class 定义移动到 parent(并使它们成为静态的)并且只让 child classes 根据需要自定义它们,这将变得更简单建筑。
假设我有一个 class Child 扩展 Class Parent。 class Child 有两个嵌套的 classes nested1 和 nested2。我想在 Parent 中定义一个抽象函数,参数为 nested1,return 类型为 nested 2。现在,为了实现这一点,我创建了一个同时具有参数和 return 的函数输入 Object。
所以现在,当我实现 child class 时,我总是需要将 Object 转换为 nested1 和 nested2。我觉得会有更好的方法来实现这一目标。有没有更好的方法来降低复杂度?
同时附上UML
从打字的角度来看,最好的方法是在 parent class 中创建一个接口,指定 child 中嵌套的 classes。这样你就不需要将参数转换为 func。这不会降低复杂性 per-se 但它确实使您的意图更清晰并且 reduces/eliminates 需要转换(总是一件好事)。
public abstract class Parent {
interface Interface1 {
//Specifications of methods that all child nested classes must have
}
interface Interface2 {
//Specifications of methods that all child nested classes must have
}
public abstract Interface2 func(Interface1 obj);
}
public class Child extends Parent {
private static class Impl1 implements Interface1 {
//Implementations of methods in Interface1 as they pertain to Child
}
private static class Impl2 implements Interface2 {
//Implementations of methods in Interface2 as they pertain to Child
}
@Override
public Interface2 func(Interface1 obj) {
//Should only have to use methods declared in Interface1
//Thus should have no need to cast obj.
//Will return an instance of Impl2
return null;
}
}
在更广泛的范围内,您应该问自己为什么每个 child 都需要自己的一组嵌套 classes。如果您可以将嵌套的 class 定义移动到 parent(并使它们成为静态的)并且只让 child classes 根据需要自定义它们,这将变得更简单建筑。