我见过很多关于对象引用的问题,并且部分理解了它们的工作原理。尽管如此,我仍然有一些疑虑。将一个对象的引用赋值给Java中的其他对象?
首先,本声明中的所有词语意味着什么?
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()
?我的头不能包裹这个。
在'Box f = ...'中,'Box'是变量'f'的类型。这意味着它可以存储对“Box”类型的任何引用,并且包含任何子类型。 –
“那么最初的”Box“是什么? Java是一种静态和强类型的语言。这意味着:每个变量都有一个在编译时已知的类型,您只能将该类型的值(或子类型,即子类)赋值给此变量。 'Box b'说:“我想要一个名为'b'的变量,它的(静态)类型是'Box''。然而,在运行时,'b'引用的对象可以是“Box”或“Box”的任何子类(例如,在您的示例中为“Cup”)。 – Turing85
@ Turing85你的评论应该是一个答案 –