Java 关于对象类型的问题

Java 关于对象类型的问题,java,object,types,Java,Object,Types,我正在学习java,有一个关于对象类型的问题 以以下为例: class A { } class B extends A { } class C {A myObject = new B();} 描述myObject类型的公认方式是什么 你说是A型、B型还是A型和B型 谢谢。myObject是a类型的引用(您的变量声明为a类型) 由myObject引用的对象本身属于B类型。实例的类型为B 这是一个上下文和焦点的问题。 当您在其他地方使用myObject时,您可能不知道它是类B的实例,只知道它是

我正在学习java,有一个关于对象类型的问题

以以下为例:

class A { }

class B extends A { }

class C {A myObject = new B();}
描述myObject类型的公认方式是什么

你说是A型、B型还是A型和B型


谢谢。

myObject
a
类型的引用(您的变量声明为
a
类型)

myObject
引用的对象本身属于
B
类型。实例的类型为
B

这是一个上下文和焦点的问题。
当您在其他地方使用
myObject
时,您可能不知道它是类
B
的实例,只知道它是类型
A

它是类型A,因为类型意味着可以对它执行操作,但它是B的实例,因此,您执行的所有操作都将以B方式进行。

myObject
是声明编译时类型为A的字段。在运行时,它将引用类型为B的对象

声明(或编译时)类型的变量和运行时类型的对象之间的这种区别对于理解多态性在静态类型语言(如Java)中的工作方式至关重要。有些事情(如重写方法的调用)由运行时类型决定,而另一些事情(如重载或静态方法的调用)由编译时类型决定

一般来说:声明的类型决定您可以对对象执行什么操作,而运行时类型决定它的行为。

继承意味着“是一种”关系-子类的实例是超类的实例。在您的示例中,由于B扩展了A,所以B的实例也是A的实例-这就是为什么您可以将新B分配给A类型的变量,而无需强制转换


变量
myObject
是类型A,但它引用的对象实际上是类型B。

您尝试过这个吗?您得到了什么输出?对象不是“存储在内部”,而是“由引用引用”。非常感谢您的快速响应。我想我现在明白了。