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

时间:2012-12-05 19:28:46

标签: java methods field add

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

4 个答案:

答案 0 :(得分:4)

您可以创建一个类,将您希望添加功能的类扩展到:

public class sub extends Original{
 ...
}

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

希望有所帮助!

答案 1 :(得分:3)

您可以使用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();

有关更详细的教程,请查看Inheritance (The Java Tutorials > Learning the Java Language > Interfaces and Inheritance)

修改:如果类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;
}

答案 2 :(得分:2)

如果您要扩展的课程不是最终的,那么这些示例才真正适用。例如,您无法使用此方法扩展java.lang.String。但是还有其他方法,例如使用CGLIB,ASM或AOP进行字节代码注入。

答案 3 :(得分:-3)

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

// Define new extension method
String.metaClass.goForIt = { return "hello ${delegate}" }

// Call it on a String
"Paul".goForIt() // returns "hello Paul"

// Create new property
String.metaClass.num = 123

// Use it - clever even on constants
"Paul".num // returns 123
"Paul".num = 999 // sets to 999
"fred".num // returns 123

我可以解释如何像Groovy那样做,但也许这对海报来说太过分了。如果他们喜欢,我可以研究和解释。