Java 为什么是';这';B类关键字返回地址?
当我调用超类方法ma()时,它正在打印B的地址。我的问题是在这个程序中,这个关键字的功能是什么。为什么在print语句中使用这个关键字并没有给出语法错误,而是给出了super关键字的错误。为什么它只打印B的引用,为什么不打印A类Java 为什么是';这';B类关键字返回地址?,java,Java,当我调用超类方法ma()时,它正在打印B的地址。我的问题是在这个程序中,这个关键字的功能是什么。为什么在print语句中使用这个关键字并没有给出语法错误,而是给出了super关键字的错误。为什么它只打印B的引用,为什么不打印A类 class A { public void ma() { System.out.print(this); //printing address of B why? } } cla
class A
{
public void ma()
{
System.out.print(this); //printing address of B why?
}
}
class B extends A
{
public void mb()
{
super.ma(); //calling super class method
}
public static void main(String[] args)
{
A re=new B(); //creating object for class B
re.mb(); //calling method mb() of class B
}
}
是对当前对象的引用,即调用其方法或构造函数的对象
使用类B
的实例间接调用类A
的ma()
方法
A re=new B(); //creating object for class B
re.mb();
此
始终引用调用方法的对象始终
仔细查看您的代码,您是否创建过a
的新实例?否。那么没有标识符可以引用A
对象,因此从逻辑上讲,您的代码永远不能输出A
对象的地址
我想你误解了super
的意思。它的意思只是“调用此方法的超类实现”,而不是“通过创建超类的实例来调用此方法”。因此,super
只有在派生类具有不同的方法实现时才会起作用。在这里,它不是
即使调用超级实现,调用此方法的对象也不会更改。它仍然是
this
…因为您正在创建一个B
,因此this
是一个B
?为什么只打印B的地址?这个程序内部是如何工作的?这里没有地址。调用Object.toString()
的结果。这不是地址,也不是打印地址。它正在打印哈希代码,因为您没有覆盖toString
。请参阅“为什么在print语句中使用此关键字不给出语法错误,而给出超级关键字的错误”。您希望它给出什么语法错误?“相反,它给出了超级关键字的错误。”在哪里?不清楚你的意思。@ AjithKM,如果你认为我的答案回答你的问题,请考虑通过点击那个标记来接受它!