Java:向现有类添加字段和方法?

Java:向现有类添加字段和方法?,java,methods,field,add,Java,Methods,Field,Add,在Java中,是否有向现有类添加一些字段和方法的方法? 我想要的是将一个类导入到代码中,我需要添加一些从现有字段派生的字段及其返回方法。 有什么方法可以做到这一点吗?您可以创建一个类来扩展要添加功能的类: public class sub extends Original{ ... } 要访问超类中的任何私有变量,如果没有getter方法,可以将它们从“private”更改为“protected”,并能够正常引用它们 希望有帮助 您可以创建一个类来扩展要添加功能的类: public clas

在Java中,是否有向现有类添加一些字段和方法的方法? 我想要的是将一个类导入到代码中,我需要添加一些从现有字段派生的字段及其返回方法。
有什么方法可以做到这一点吗?

您可以创建一个类来扩展要添加功能的类:

public class sub extends Original{
 ...
}
要访问超类中的任何私有变量,如果没有getter方法,可以将它们从“private”更改为“protected”,并能够正常引用它们


希望有帮助

您可以创建一个类来扩展要添加功能的类:

public class sub extends Original{
 ...
}
要访问超类中的任何私有变量,如果没有getter方法,可以将它们从“private”更改为“protected”,并能够正常引用它们


希望有帮助

您可以在Java中扩展类。例如:

public class A {

  private String name;

  public A(String name){
    this.name = name;
  }

  public String getName(){
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

}

public class B extends A {
  private String title;

  public B(String name, String title){
    super(name); //calls the constructor in the parent class to initialize the name
    this.title= title;
  }      

  public String getTitle(){
    return this.title;
  }

  public void setTitle(String title) {
    this.title= title;
  }
}
现在,
B
的实例可以访问
A
中的公共字段:

B b = new B("Test");
String name = b.getName();
String title = b.getTitle();
有关更详细的教程,请参阅

编辑:如果类
A
具有如下构造函数:

public A (String name, String name2){
  this.name = name;
  this.name2 = name2;
}
然后在B班上你有:

public B(String name, String name2, String title){
  super(name, name2); //calls the constructor in the A 
  this.title= title;
}

您可以用Java扩展类。例如:

public class A {

  private String name;

  public A(String name){
    this.name = name;
  }

  public String getName(){
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

}

public class B extends A {
  private String title;

  public B(String name, String title){
    super(name); //calls the constructor in the parent class to initialize the name
    this.title= title;
  }      

  public String getTitle(){
    return this.title;
  }

  public void setTitle(String title) {
    this.title= title;
  }
}
现在,
B
的实例可以访问
A
中的公共字段:

B b = new B("Test");
String name = b.getName();
String title = b.getTitle();
有关更详细的教程,请参阅

编辑:如果类
A
具有如下构造函数:

public A (String name, String name2){
  this.name = name;
  this.name2 = name2;
}
然后在B班上你有:

public B(String name, String name2, String title){
  super(name, name2); //calls the constructor in the A 
  this.title= title;
}

只有当您扩展的类不是最终类时,这些示例才真正适用。例如,不能使用此方法扩展java.lang.String。但是,还有其他方法,例如使用CGLIB、ASM或AOP使用字节码注入。

这些示例仅在您扩展的类不是final时才真正适用。例如,不能使用此方法扩展java.lang.String。但是,还有其他方法,例如使用CGLIB、ASM或AOP使用字节码注入。

假设这个问题是关于C#扩展方法或JavaScript原型的等价物,那么从技术上讲,这是可能的,因为Groovy做了很多事情。Groovy编译Java,可以扩展任何Java类,甚至是最终的Java类。Groovy有元类来添加属性和方法(原型),例如:


我可以解释如何像Groovy那样做,但这对海报来说可能太多了。如果他们愿意,我可以研究和解释。

假设这个问题是关于C#扩展方法或JavaScript原型的等价物,那么从技术上讲,Groovy可以做很多事情。Groovy编译Java,可以扩展任何Java类,甚至是最终的Java类。Groovy有元类来添加属性和方法(原型),例如:



我可以解释如何像Groovy那样做,但这对海报来说可能太多了。如果他们愿意,我可以研究和解释。

你可以对现有类进行子类化吗?你可以扩展你拥有的类,并在新类中添加新方法……你控制源代码吗?想一想扩展或合成。我不知道为什么人们会否决这个。。。我认为这家伙想要的是一个与C#中的扩展方法等价的方法,在C#中,您不必子类化类A,但您可以编写一个扩展方法foo(),然后您可以调用A或从A继承的任何东西。。。(A.foo()。现在我不知道是否有这样的东西,但它非常有用。我也在寻找上面描述的功能。我不能对现有的类(Selenium的窗口类)进行子类化,因为有很多框架代码实例化了它,而我不能更新它们来实例化我的子类。所以我需要在这个类中注入一些方法。另一种方法是创建一个新的类层次结构,但将方法直接注入窗口类会更干净。Java有类似于C#扩展方法的东西吗?你能对现有类进行子类化吗?你能扩展你拥有的类,并在新类中添加新方法……你能控制源代码吗?想一想扩展或合成。我不知道为什么人们会否决这个。。。我认为这家伙想要的是一个与C#中的扩展方法等价的方法,在C#中,您不必子类化类A,但您可以编写一个扩展方法foo(),然后您可以调用A或从A继承的任何东西。。。(A.foo()。现在我不知道是否有这样的东西,但它非常有用。我也在寻找上面描述的功能。我不能对现有的类(Selenium的窗口类)进行子类化,因为有很多框架代码实例化了它,而我不能更新它们来实例化我的子类。所以我需要在这个类中注入一些方法。另一种方法是创建一个新的类层次结构,但将方法直接注入窗口类会更干净。Java有类似于C#扩展方法的东西吗?Thanx,非常有用!现在我可以使用多少个super(field),因为如果ex的构造函数,上面的范例有两个字段,那么第二个字段就错了。啊,你只需要调用一个super。基本上,它调用父类的构造函数。因此,在构造函数中只调用它一次,它必须是第一行。参见edit.Thanx,非常有用!现在我可以使用多少个super(field),因为如果ex的构造函数,上面的范例有两个字段,那么第二个字段就错了。啊,你只需要调用一个super。基本上,它调用父类的构造函数。因此,在构造函数中只调用它一次,它必须是第一行。请参阅编辑。这篇文章没有要求解释Groovy的特性。正确-我试图帮助添加更多信息。显然,扩展/子分类是常见的方式,很多人都指出了这一点,但如果出于某种原因,我们从字面上理解提问者——他想在Java中向现有的类添加字段/方法,那么这就不适合轻松的人。槽