[英]Creating a new subclass in superclass method in Java
我有一个抽象超类,其中有我的子类使用的具体方法。 在至少一种方法中,我想返回一个相同类型的新对象。
举一个更好的例子,我有一个带有字段(整数)的A类。 我有扩展了A的类B,并且创建了一个名为classB的类B对象。 classB.someMethod应该将num平方并返回具有该平方值的新B类对象。 我不想更改原始实例。
我已经阅读了一些有关反射的文章,因为这是我搜索期间发现的很多内容。 经常建议使用newInstance()。 我还读过,反思可能是不好的。 是否有更好的方法来处理我要做的事情? 它是针对我为openGL编程而创建的个人类,可以通过多种方式进行操作,但始终尝试尽可能使事情保持简单。 如果需要,我可以详细说明我的课程。
public class A(){
private int num;
public A(int num){
this.num = num;
}
public A square(A a){
temp = a.num * a.num;
return new class same type as the sublcass(temp);
}
}
public class B extends A(){
public B(int num){
super(num);
}
}
public static void main(String...args){
B first = new B(4);
B second = B.square();
}
使用钩子方法(超类中的抽象方法)来生成子类的实例。
如果要在超类中具有特定的返回类型,则需要一个类型变量,其中包含最特定的类引用。 请记住,这会使您的代码更难以理解。
像这样:
public class A<SUB extends A<SUB>> {
private int num;
public A(int num){
this.num = num;
}
public SUB square(){
int temp = num * num;
return newInstance(temp);
}
protected abstract SUB newInstance(int temp);
}
public class B extends A<B> {
public B(int num){
super(num);
}
protected B newInstance(int temp) {
retunr new B(temp);
}
}
public static void main(String...args){
B first = new B(4);
B second = first.square();
}
您可以覆盖方法,只要类型可以分配给父方法即可。 您可以在此处查看其定义,并使用以下模式将其应用于代码。
public class A {
private int num;
public A(int num){
this.num = num;
}
public A square(A a) {
temp = a.num * a.num;
return newInstance(temp);
}
protected A newInstance(int num) {
return new A(num);
}
}
public class B extends A(){
public B(int num){
super(num);
}
public B square() {
return (B)super.square();
}
protected B newInstance(int num) { // Yes, this is allowed
return new B(num);
}
}
public static void main(String...args){
B first = new B(4);
B second = B.square();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.