我是Java编程的新手,我正在尝试定义类的层次结构,其中基类的构造函数调用可以在子类中重写的方法。现在,我已经理解构造函数只能调用类(即静态)方法,而不是实例方法。但是静态方法不能被覆盖(它们只被屏蔽)。因此,以下示例打印“1 1”而不是“1 2”,正如我所希望的......是否有一种简单,优雅的方式来实现此类行为?
class A {
private int data;
public A(int input) {
data = computeData(input);
}
static private int computeData(int i) {
return i;
}
public String toString() { return "" + data;}
}
class B extends A {
public B(int input) {
super(input);
}
static private int computeData(int i) {
return 2*i;
}
}
class Example {
public static void main(String[] args) {
System.out.println(new A(1) + " " + new B(1));
}
}
答案 0 :(得分:0)
您还可以从构造函数中调用实例方法(并且可以在子类中重写/重新定义实例方法)。
但是,您必须首先调用super()
构造函数。
答案 1 :(得分:0)
您可以在类构造函数中调用实例方法。
在class B
public B(int i) {
super(i);
}
@Override
protected int computeData(int i) {
return 2*i;
}
在class A
protected int computeData(int i) {
return i;
}
答案 2 :(得分:0)
试试这个:private methods
不会被继承。所以在B class constructor
中,您正在调用super(i)
,其中使用了{A}类的computeData method
。
class A1 {
private int data;
public A1(int input) {
data = computeData(input);
}
protected int computeData(int i) {
return i;
}
public String toString() { return "" + data;}
}
class B1 extends A1 {
public B1(int input) {
super(input);
}
protected int computeData(int i) {
return 2*i;
}
}
public class Example {
public static void main(String[] args) {
System.out.println(new A1(1) + " " + new B1(1));
}
}