Java中的辅助引用

Java中的辅助引用,java,Java,在这里,我们如何将子引用分配给父引用?b和c也是不同的对象类型,那么我们如何将它们分配给另一个呢?a,b和c是a类型的变量,这意味着它们可以保存对a类或a的任何子类的引用,其中包括类B和C 当你写作时 class A{} class B extends A{} class C extends A{} public class Test { public static void main(String [] args){ A a = new A(); A b = new

在这里,我们如何将子引用分配给父引用?b和c也是不同的对象类型,那么我们如何将它们分配给另一个呢?

a
b
c
a
类型的变量,这意味着它们可以保存对
a
类或
a
的任何子类的引用,其中包括类
B
C

当你写作时

class A{}
class B extends A{}
class C extends A{}

public class Test {
     public static void main(String [] args){
    A a = new A();
    A b = new B();
    A c = new C();

    a = b;
    b = c;
    }
}
您没有将类
C
的对象分配给类
B
的变量(无法通过编译),而是将类
C
的对象(由
C
变量持有)的引用分配给类
a
的变量

我们如何将子引用分配给父引用

在面向对象的概念中,当您说
类B扩展了A
时,
类B
类A
保持IS-A关系。因此,可以将B对象作为类型A指定给引用

b和c是不同的对象类型,那么我们如何将它们分配给 另一个

即使它们是不同的类型,因为
类B
IA-A类A和
类C
(同样)
类A
的-A
类型(根据它们的关系),所以您可以将两个B&C对象都指定给引用类型A


但是重要的一点是,您不能调用引用类型
A
指向对象
B
B
特定成员(方法/字段),也就是说,您只能调用引用类型
A
A成员(即使对象是
B
)因为多态性和遗传性。当你这么说的时候

b = c;
实际上你说,所有的经理都是工人。但经理比工人更特殊。因此,我们使用
extends
关键字进行继承。每一位经理都是一名工人,但更为细致的工人

class Manager extends Worker{}
在第一行中,
o1
是工作者对象(常规类型)。 第二行是向上投射的一个例子。这一行表示:
o2
是一个管理器对象,但o2的接口是工作者接口。
在第三行,因为每个经理都是工人,您可以将管理器对象分配给工作者类型引用。

b
c
是相同类型的引用:
a
,即使它们引用不同类型的对象,它们仍然可以相互分配,因为所需的只是被引用对象是
a
的实例。除此之外,“儿童参考”是什么意思?你的意思是子类/超类类型的引用吗?公共类a{}公共类B扩展了{}公共类C扩展了{}列表listA=newArrayList();List listB=新的ArrayList();listA=listB;listB=listA;为什么这是无效的then@VipinDubey因为
ArrayList
不是
ArrayList
的子类。
Worker o1 = new Worker();
Worker o2 = new Manager();
o1 = o2;