我已经看到很多关于对象引用的问题,并且已经部分地理解它们是如何工作的。我对他们仍有一些疑问。
首先,本声明中的所有词语是什么意思?
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()
?无法绕过这个。
答案 0 :(得分:1)
Box f = new Cup();
创建一个新的Cup并将其存储在f
类型的变量Box
中。下面的代码看到f
属于Box
类型,并将其视为此类。由于Box
没有名为disp()
的方法,因此您无法执行f.disp()
。
在致电Box f...
之前,您必须将Cup f...
更改为Cup
或将f转换为disp()
类型。
答案 1 :(得分:0)
您需要了解面向对象的概念。在这里,您需要应用基本继承和覆盖概念。
Cup
是Box
。Box
有display()
和daa()
种方法。Cup
中,您已覆盖display()
Box
方法daa()
,继承disp()
Cup
方法{/ 1}}本身。
Box f = new Cup();
在这里,您要创建一个Cup
的对象,并且它被保存在Box
类型引用中,这可以完成,因为Cup
是Box
。
f.disp();
这会产生编译错误,因为disp()
方法无法在编译时解析,因为它未在Box
类中定义。