我有一个界面:
In [2]: c
Out[2]: array([ 13., 21., 16.])
具有参数属于接口类型的方法的类:
public interface TestFace {
public String outThis();
}
如果我像这样调用对象的方法:
class MyClass {
public void outMeth(TestFace inMeth){
System.out.print(inMeth); //the method attempts to print the interface type
}
}
打印值是对实例的引用。有人可以解释为什么会发生这种情况/怎么做到这一点?
答案 0 :(得分:3)
在System.out.println
上执行Object
的结果将始终是调用对象的toString()
方法的结果。如果从Object
继承(通过不编写显式toString()
),则会获得默认的Object
实现,该实现已指定:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@'”以及哈希代码的无符号十六进制表示形式组成。宾语。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
"名称"一个匿名类通常反映了定义匿名类的类,通常添加了$1
或类似的类。
如果你想要一个更有用的toString()
,请覆盖它并自己写一个:
new TestFace() {
public String outie() {
String val = "something";
return val;
}
public String toString() {
return outie();
}
}
答案 1 :(得分:1)
如果您想打印val
,只需覆盖toString()
方法。
MyClass a = new MyClass();
a.outMeth(new TestFace() {
public int outie() {
int val = "something";
return val;
}
@Override
public String toString() {
return outie();
}
});