将一个对象的引用赋值给Java中的其他对象?
我见过很多关于对象引用的问题,并且部分理解了它们的工作原理。尽管如此,我仍然有一些疑虑。将一个对象的引用赋值给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 = new Cup();
创建一个新的杯子并将其存储在Box
类型的变量f
中。下面的代码看到f
是Box
类型,并将其视为这样。由于Box
没有称为disp()
的方法,因此无法执行f.disp()
。
在致电disp()
之前,您必须将Box f...
更改为Cup f...
或者将f改为输入Cup
。
好吧,所以对象是杯型的,但它下面的代码认为它是Box的类型?所以只有Box内容可以访问? –
你是非常接近的:对象是类型为Cup和Box类型的对象,因为Cup也是一个Box(Cup是Box的子类)。下面的代码只知道它是一个Box对象(因为它是一个Box变量),因此只能访问Box成员 – Breeze
啊,是的,我现在明白了。清理完了!虽然没有足够的代表upvote:p –
您需要了解面向对象的概念。在这里你需要应用基本继承和重写概念。
-
Cup
是Box
的子类。 -
Box
有display()
和daa()
方法。 - 在
Cup
已覆盖的Box
display()
方法,继承daa()
和Cup
本身disp()
方法。
Box f = new Cup();
在这里,你创建的Cup
一个对象,它是在Box
型参考举行,这是可以做到,因为Cup
是Box
。
f.disp();
这给出了一个编译错误作为disp()
方法,因为它没有在Box
类中定义不能在编译时解决。
我喜欢这个解释,谢谢。 “因为杯子是一个盒子”明确表示 –
在'Box f = ...'中,'Box'是变量'f'的类型。这意味着它可以存储对“Box”类型的任何引用,并且包含任何子类型。 –
“那么最初的”Box“是什么? Java是一种静态和强类型的语言。这意味着:每个变量都有一个在编译时已知的类型,您只能将该类型的值(或子类型,即子类)赋值给此变量。 'Box b'说:“我想要一个名为'b'的变量,它的(静态)类型是'Box''。然而,在运行时,'b'引用的对象可以是“Box”或“Box”的任何子类(例如,在您的示例中为“Cup”)。 – Turing85
@ Turing85你的评论应该是一个答案 –