在Java类和对象中,我们使用“ this”关键字来引用类中的当前对象。从某种意义上说,我相信“ this”实际上返回了自身的对象。
例如:
class Lion
{
public void Test()
{
System.out.println(this); //prints itself (A Lion object)
}
}
在超类和子类的情况下。我以为“ super”关键字将返回超类的对象。但是似乎这次我弄错了:
例:
class Parent
{
public Parent(){
}
}
class Child extends Parent
{
public Child(){
System.out.println(super.getClass()); //returns Child. Why?
}
}
我的问题: 在上面的示例中,我期望编译器可以打印出来class Parent
,但是它可以打印出来class Child
。为什么会这样呢?什么超级真正返回?
使用的方法调用super
只会忽略当前类中的所有覆盖。例如:
class Parent {
@Override public String toString() {
return "Parent";
}
}
class Child extends Parent {
@Override public String toString() {
return "Child";
}
public void callToString() {
System.out.println(toString()); // "Child"
System.out.println(super.toString()); // "Parent"
}
}
在调用的情况下getClass()
,这是一个方法,它返回被调用的类,并且不能被覆盖-
因此,尽管我可以看到您为什么期望它返回Parent.class
,但它仍然使用与通常相同的 实现
,返回Child
。(如果您确实需要父类,则应查看Class
API。)
实际上,通常将其用作替代的一部分。例如:
@Override public void validate() {
// Allow the parent class to validate first...
super.validate();
// ... then perform child-specific validation
if (someChildField == 0) {
throw new SomeValidationException("...");
}
}
问题内容: 说我有一张这样的表: 如何才能以这种格式对结果进行实际排序?即由父级->子级->子子级命令,根据我只要求说最多5个级别?我已经研究了“嵌套集模型”,但是对于我的要求而言,它似乎太复杂了。我不确定的是真正理解了可用于显示如上所示结果的SQL查询,或者在这种情况下,我应该使用像PHP这样的服务器端语言来帮我吗? 问题答案: 您可以尝试以下方法: 如果层次结构是有限的,则不需要递归查询。 o
问题内容: 我不理解javascript中的这种行为来继承,我一直都这样定义它: 但就我而言,这些行: 当我在Spaceship构造函数中执行console.log(this)时,可以看到 proto 属性设置为Spaceship而不是GameObject,如果删除它们,则将其设置为GameObject。 如果我使用: 我对此没有更多问题。之所以阻止我,是因为我有另一个具有add()方法的对象,并
为什么在这个输出的末尾有一个尾随的%?我尝试刷新流(而不是endl),但是当我调用endl结束流时,它会删除%。这里的任何帮助都将不胜感激。 下面是关于编译器的更多信息,我使用的是macOS 10.15.4:
有我的密码 我怎样才能得到异常原因?在我的例子中,如果我运行gradle,从命令行安装(没有jenkins)是:错误:不兼容的类型:不能转换为boolean 但我会在jenkins作业控制台输出中看到错误
问题内容: 我正在尝试该功能。 从numpy文档中,我了解到,如果仅给出一个数组作为输入,它应该返回该数组非零的索引(即“ True”): 如果仅给出条件,则返回元组condition.nonzero(),其中condition为True的索引。 但是,如果尝试一下,它将返回一个包含两个元素的 元组 ,其中第一个是所需的索引列表,第二个是空元素: 所以问题是:为什么?这种行为的目的是什么?在什么情
问题内容: 我正在使用猫鼬(节点),输出id而不是_id的最佳方法是什么? 问题答案: 我在执行此操作的模型上创建toClient()方法。这也是重命名/删除您不想发送给客户端的其他属性的好地方: