Java 中的引用和对象

Reference and Object in Java

我卡在这部分了。

class1 cls = new class2(); //class1 reference and class2 object

我知道这是方法重写,但不知何故不清楚幕后的实际情况。我需要一个清晰的视图,因为我可以在需要的地方实现它。任何带有示例的答案都会使概念更加清晰。谢谢

嗯,这不是方法覆盖,就像下面的情况,

  1. Horse 是一个 Animal。在 Java 中,您会说 HorseAnimal 的子 class。

  2. 现在,假设有一匹马的名字是"lightening"。在某种 java 意义上你可以写成 Horse horse1 = new Horse( "loghtening" );

  3. 但是再一次...因为每匹马都是动物..所以你也可以写,Animal animal1 = new Horse( "loghtening" );

  4. 但是...有什么区别...?嗯……不同之处在于,当你提到动物时,你应该谈论适用于所有动物的事情……而不仅仅是马。在任何谈话中...如果您说 "horse-specific" 关于任何动物...人们会感到困惑。例如你不能只说 "I had a ride on back of my pet animal Lightenning"... 好吧... 其他人不知道闪电是马,你不能骑在所有动物身上。同样,在 Java 中,即使 Horse class 有一个方法 rideOnMyBack 你也不能调用 animal1.rideOnMyBack()... 因为在你与 Java 的对话中... animal1 被称为动物

您问题中的代码行通常称为 "programming to an interface"。不是 "method overriding".

例如在本网站上搜索此内容。例如。看着。 What does it mean to "program to an interface"?

您问题的代码片段应该是 Class1 class1 = new class2(); 而不是 class class1 = new class2();,因为您不能将任何对象分配给 class.

的引用

并且这不是方法覆盖

Method Overriding 是您在 class 中编写一个与其中一个方法具有相同名称、相同参数和相同 return 类型的方法其超级方法 class.

在你的例子中,它被称为Type CastingAuto boxing/unboxing。假设在您的情况下 Class2 extends Class1 那么当您实际在内存中实例化 Class2 时,将在内存中创建三个对象,如下图所示 -

现在,当您执行 Class1 class1 = new class2(); 时,实际上将分配 Class1 本身的引用。但是根据代码你会有一种在Class1中分配Class2对象的感觉,这在java.

中是不可能的

作为经验法则,您只能将 class 或 null 的对象分配给引用,不能分配任何其他内容。

现在访问方法和变量 -

  • subclass的方法总是优先的。因此,如果您有 2 个具有相同名称、相同参数的方法,那么将调用 sub class 的方法。这称为方法覆盖。
  • 将始终访问相同的实例变量class。