anchor.diff:    private String bar$original() { return "bar"; }
   }
   ----
  ++
  +原来返回 `bar` 的方法被保存到了另外一个方法里，因此还可以访问。当重定基底一个类时，Byte Buddy 对待所有方法定义就像你定义一个子类一样，例如，如果你想调用重定义方法的超类方法是，它会调用被重定义的方法。__相反，它最终将这个假设的超级类别变成了上面显示的重定义类型。__
   
  +任何重定基底、重定义或子类都是使用相同的 API 来执行，接口由 `DynamicType.Builder` 来定义。__这样，可以将类定义为子类，然后更改代码来替换重定类。__你只需要修改 Byte Buddy 领域特定语言的一个单词就能达到这个目的。这样，在定义的未来阶段，你就可以透明地切换任何一种方法：
   
   [source,{java_source_attr}]
   ----
  
positive.code: [[domain-specific-language-and-immutability]]
  === 领域特定语言和不变性
  
  [source,{java_source_attr}]
  ----
  ByteBuddy byteBuddy = new ByteBuddy();
  
negative.code: new ByteBuddy().redefine(Foo.class)
  new ByteBuddy().rebase(Foo.class)
  ----
  
  这在本教程的其余部分都有所解释。因为定义子类对于 Java 开发人员来说是如此地熟悉，所以，接下来的所有解释以及 Byte Buddy 领域特定语言的实例都是用创建子类来演示。但是，请记住，所有类可以类似地通过重定义或重定基类来定义。
  
  [[loading-a-class]]
  === 加载类
  