【发布时间】:2016-02-27 13:15:34
【问题描述】:
好的,所以我不确定这个问题是否已经存在,因为我不知道如何格式化它,但问题是:相同的方法能否根据构造函数产生不同的结果? (如果我重复这个问题或者这是一个愚蠢的问题,我深表歉意。)
例如,假设我有一个接口MyInterface 和函数public void foo();。假设我们有课:
public class MyClass implements MyInterface {
public MyClass() {
// I want foo() to print "Empty constructor" with sysout.
}
public MyClass(int x) {
// I want foo() to print "Constructor with int" with sysout.
}
}
所以现在,如果创建两个引用MyClass mc1 = new MyClass(); 和MyClass mc2 = new MyClass(5);,然后调用mc1.foo(); 和mc2.foo();,结果应该是:
空构造函数。
带 int 的构造函数。
我尝试在构造函数中使用new MyInterface { @Override public void foo() { ... } },但似乎不起作用。
【问题讨论】:
-
所以你想要不同的方法?保护变量?两个不同的类
-
你这样做是为了好玩吗?有什么意义?
-
简短回答是,但是您需要编写代码,例如,您可以使用实例字段
private Integer value;,在您的public MyClass(int x)构造函数中,您可以将x的值分配给value;value = x。然后在foo中,会测试value看是否是null;if (value == null),当value为null时,打印Empty constructor.,不是时,打印Constructor with int.;举个例子 -
@MadProgrammer,正如我提到的一个保护变量。非常丑陋,我看不出有什么真正的原因,但谁知道呢,我可能错了。
-
所以你想要不同的行为取决于你调用什么来创建一个对象。这真的听起来你想要两个不同的类都实现接口。
标签: java methods constructor interface overriding