Java 为什么是';这';B类关键字返回地址?

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

当我调用超类方法ma()时,它正在打印B的地址。我的问题是在这个程序中,这个关键字的功能是什么。为什么在print语句中使用这个关键字并没有给出语法错误,而是给出了super关键字的错误。为什么它只打印B的引用,为什么不打印A类

  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,如果你认为我的答案回答你的问题,请考虑通过点击那个标记来接受它!