在 Java 中,是否有一种向现有类添加一些字段和方法的方法?我想要的是我有一个类导入到我的代码中,我需要添加一些从现有字段派生的字段及其返回方法。有没有办法做到这一点?
问问题
49420 次
4 回答
7
您可以创建一个类来扩展您希望添加功能的类:
public class sub extends Original{
...
}
要访问超类中的任何私有变量,如果没有 getter 方法,您可以将它们从“私有”更改为“受保护”并能够正常引用它们。
希望有帮助!
于 2012-12-05T19:31:46.727 回答
4
您可以在 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();
有关更详细的教程,请查看继承(Java 教程 > 学习 Java 语言 > 接口和继承)。
编辑:如果类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;
}
于 2012-12-05T19:33:19.830 回答
2
这些示例仅在您扩展的类不是最终类时才真正适用。例如,您不能使用此方法扩展 java.lang.String。然而,还有其他方法,例如使用 CGLIB、ASM 或 AOP 使用字节码注入。
于 2013-11-13T19:37:37.663 回答
-4
假设这个问题是询问 C# 扩展方法或 JavaScript 原型的等价物,那么从技术上讲,这可能是 Groovy 经常做的一件事。Groovy 编译 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 相同的方式进行操作,但对于发帖者来说,这可能太过分了。如果他们愿意,我可以研究和解释。
于 2016-05-14T22:10:49.010 回答