如果我有
class A{ }
class B extends A{ }
我实例化一个引用变量" var"
A var = new B();
" var"然后被认为被实例化为" B"宾语?其中A是变量引用类型,而不是为" var"。
实例化的Object答案 0 :(得分:0)
无论你如何引用它,对象类型仍然是B.也就是说,代码var.getClass()
将返回B而不是A,因此“var”的类是B.
您也可以说“var”是A的实例,代码boolean isA = (var instanceof A)
将返回true,但var.getClass()
不会返回A.
答案 1 :(得分:0)
A
和B
都是类。类是蓝图,对象是类的实例化。
但是,变量既不是对象也不是对象。变量仅保存对象的位置。因此,对象变量(即非原始变量)在Java中称为引用变量。
在这种特定情况下,我们会说变量var
的类型为A
,但引用类型为B
的对象。即使var
引用了B
对象,它也只能访问父A
中定义的方法,因为它的类型为A
。
答案 2 :(得分:0)
var
是A
类型的引用。它指向B
类型的对象。但是,它只知道A
中公开的方法。因此,如果课程B
定义了A
中没有的方法,则您无法通过var
引用来调用它们。
答案 3 :(得分:0)
是的,它会成功投放到A
,但您无法访问B
中的任何A
特定属性。见Polymorphism
答案 4 :(得分:0)
一个var = new B(); 这是Java中上传的典型示例。 RHS表示类型B的对象通过其默认的no-args构造函数在内存中实例化。但是你需要一个引用变量来指向内存。所以在LHS“A var”中,var是A类的引用变量。因为在Java中,允许运行时多态或动态方法调度,其中在运行时而不是编译时解析对重写方法的调用,并且通过超类的引用变量调用重写方法。
所以简而言之。 B的对象被实例化并且为了实现运行时多态性,它是类型A的引用变量。
希望这种理解有助于发现你的答案。