当前位置: 首页 > 面试题库 >

Java中的OOP:带方法链接的类继承

倪鸿禧
2023-03-14
问题内容

我有一个父类,它定义了链接器方法的集合(返回“
this”的方法)。我想定义多个子类,这些子类包含它们自己的链接器方法,但也“覆盖”父方法,以便返回子类的实例而不是父类。

我不想在每个子类中都重复相同的方法,这就是为什么我有一个父类包含所有子类共享的方法的原因。谢谢。

class Chain {
  public Chain foo(String s){
    ...
    return this;
  }
}

class ChainChild extends Chain {
  //I don't want to add a "foo" method to each child class
  /*
  public ChildChain foo(String s){
    ...
    return this;
  }
  */

  public ChainChild bar(boolean b){
    ...
    return this;
  }
}

ChainChild child = new ChainChild();
child.foo().bar(); //compile error: foo() returns a "Chain" object which does not define the bar() method.

问题答案:

返回的父类中的方法this仍将返回对子类对象的引用。您只能将其视为父类的对象(除非您对其进行了强制转换),但实际上它将是其原始类型。

您可以考虑使用如下泛型:

// This seems a bit too contrived for my liking. Perhaps someone else will have a better idea.
public class Parent<T extends Parent<T>> {
    T foo () {
        return (T) this;
    }
}

public class Child extends Parent<Child> {
    public void bar () {
        Child c = foo();
    }
}


 类似资料:
  • 我有一个父类,它定义了链表方法(返回“this”的方法)的集合。我想定义多个子类,这些子类包含自己的链式方法,但也“重写”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中重复相同的方法,这就是为什么我有一个父类,其中包含所有子类共享的方法。谢谢

  • 问题内容: 我正在开发一个使用angular作为客户端框架的应用程序,目前使用angular作为岩石,我真的很高兴,尽管现在我发现我经常复制和粘贴要组织成类层次结构的代码。例如,对话框共享一组通用的功能,需要打开,关闭它们,提供功能的代码也是从某些父BaseTypeaheadClass继承的首选对象,尽管我在angular中没有发现的一件事是组织这些层次结构。控制器,服务和提供者都在下面使用普通的

  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 问题内容: (不要与itertools.chain混淆) 我正在阅读以下内容:http : //en.wikipedia.org/wiki/Method_chaining 我的问题是: 在python中实现方法链接的最佳方法 是 什么? 这是我的尝试: 一个问题是调用是否修改但不返回。(那么我应该退货还是退货)。 有没有人有更好的实现链接的方法?可能有很多方法可以做到这一点。 我是否应该假设某个方