在Java中将一个对象的引用分配给其他对象?

时间:2016-09-19 18:34:26

标签: java object inheritance reference

我已经看到很多关于对象引用的问题,并且已经部分地理解它们是如何工作的。我对他们仍有一些疑问。

首先,本声明中的所有词语是什么意思?

Box b = new Box();

我知道new Box()会导致创建一个对象,并返回对该对象的引用。如果我没有错,此引用将存储在b中。那么最初的Box是什么?根据我所读到的,它是定义Box的类。我不确定。这让我想到了下一个问题。

我试图理解声明中的初始术语对我的尝试是什么:

class LOL
{
    public static void main(String args[])
    {
        Box b=new Box();
        Cup c=new Cup(); 
        Box f=new Cup(); //*****
        f.daa(); //Prints Box.daa
        f.display(); //Prints Cup.display
        f.disp(); //ERROR!
    }
}
class Box
{
    void display()
    {
        System.out.println("Box.display");
    }
    void daa()
    {
        System.out.println("Box.daa");
    }
}
class Cup extends Box
{
    void display()
    {
        System.out.println("Cup.display");
    }
    void disp()
    {
        System.out.println("Cup.disp");
    }
}

那么这里发生了什么?线*****实际上做了什么?创建的对象是Cup类型(我认为),那为什么不能调用f.disp()?无法绕过这个。

2 个答案:

答案 0 :(得分:1)

Box f = new Cup();创建一个新的Cup并将其存储在f类型的变量Box中。下面的代码看到f属于Box类型,并将其视为此类。由于Box没有名为disp()的方法,因此您无法执行f.disp()

在致电Box f...之前,您必须将Cup f...更改为Cup或将f转换为disp()类型。

答案 1 :(得分:0)

您需要了解面向对象的概念。在这里,您需要应用基本继承和覆盖概念。

  • CupBox
  • 的子类
  • Boxdisplay()daa()种方法。
  • Cup中,您已覆盖display() Box方法daa(),继承disp() Cup方法{/ 1}}本身。

Box f = new Cup();

在这里,您要创建一个Cup的对象,并且它被保存在Box类型引用中,这可以完成,因为CupBox

f.disp(); 

这会产生编译错误,因为disp()方法无法在编译时解析,因为它未在Box类中定义。