Java 需要实例变量时使用模板类
我试图利用父类在多个继承类中重用,但是父类需要一个实例变量才能工作Java 需要实例变量时使用模板类,java,oop,Java,Oop,我试图利用父类在多个继承类中重用,但是父类需要一个实例变量才能工作 public class Num { private int a = 1; public int calc() { int c = a + 4; return c; } } public class Two extends Num { private int a = 2; } 每个子类之间的主要区别是它们的实例变量的值。有没有一种方法可以让两个人仍然使用泛型类
public class Num {
private int a = 1;
public int calc() {
int c = a + 4;
return c;
}
}
public class Two extends Num {
private int a = 2;
}
每个子类之间的主要区别是它们的实例变量的值。有没有一种方法可以让两个人仍然使用泛型类Num中的calc()代码,而不通过简单地将“a”参数设置为其自身的值来覆盖它,或者我的做法完全错误?只是一个技巧,将a作为输入参数传递给该方法应该可以帮助您:
public int calc(int a) {
int c = a + 4;
return c;
}
我认为即使您不这样做,那么使用this
应该使用调用对象的a值:
public int calc() {
int c = this.a + 4;
return c;
}
将“a”的初始化放在构造函数中并使其受到保护:
public class Num {
protected int a;
public Num() { a = 1; }
public int calc() {
int c = a + 4;
return c;
}
}
public class Two extends Num {
public Two() { a = 2; }
}
为
a
添加受保护的getter,然后它将类似于模板方法:
public class Num {
public int calc() {
int c = getA()+ 4;
return c;
}
protected int getA() {
return 1;
}
}
static class Two extends Num {
@Override
protected int getA() {
return 2;
}
}
使
a
受到保护并不是最简单的方法。如果将a
的初始化放在Num
的构造函数中,则Two
也可以调用该构造函数。重用它的逻辑
public class Num {
private final int a;
public Num(int a) {
this.a = a;
}
public int calc() {
return a + 4;
}
}
public class Two extends Num {
public Two(int a) {
super(a);
}
}
了解如何在方法中传递参数以及如何定义get;设置