java为什么我需要创建一个类的引用,然后创建一个B类的对象
我是编程新手,正在看youtube教程(10:05-10:47) https://www.youtube.com/watch?v=ssAt_qrQpi0&index=31&list=PLsyeobzWxl7rooJFZhc3qPLwVROovGCfh 我不明白为什么我们需要A类的参考和B类的对象
该视频中的Kotlin示例: var h:Human=Alien()
该视频中的Java示例 人类h=新外星人()
人与外国人客体的参照
# 1 楼答案
好的,让我解释一下
假设“人”是人,我们想创建一个类的对象“人”
我们给人类类一些人类可以做的功能。让我们说走,跑,坐
每个函数都告诉对象(人)该做什么
另一方面,我们想为外星人创建一个类来创建另一个对象。我们将把它命名为“外星人”。假设外星人是人形的,所以它可以做任何人类能做的事情,再加上一些人类不能做的特殊能力。例如“飞”
为了防止它编写与类Alien完全相同的函数(walk、run、sit)。我们继承了类Human,因此我们可以从Human类中获得函数(walk、run、sit)
让我们说: 人类h->;对象“h”是人类(oid)
但是“h”实际上是一个外星人,所以我们必须定义它,这样代码就出现了:
换句话说。假设你有这样一个结构:
如果我错了,请纠正我
我希望这能有所帮助
# 2 楼答案
这里“人类”和“外星人”的用法很可怕。与其说是“人”,不如说是“动物”。与其说是“外星人”,不如说是“狗”
术语也不太好。“对象”是字面对象本身:物理狗<->;内存中与之相关的位。“Reference”是变量
h
。它引用了对象狗h
并不像视频中提到的人类/外星人那样,是“动物和狗的对象”。这是“指狗的物体”。然而,变量“h”本身并没有强迫只参考狗。事实上,它可以引用任何动物例如,我可以编写以下代码:
如果我写了
Dog mypet
行,那么我将被迫只写mypet = new Dog()
或mypet = getDogFromShelter(myNeighborhoodShelter)
。它不允许我写mypet = new Cat()
猫很酷,所以那太可怕了。因此,我们写
Animal mypet
来允许变量mypet
引用任何动物Dog
,Cat
,Elephant
都将可用。然而,由于这个限制,我不允许对mypet
做任何Dog
特定的事情如果
mypet
是一种动物,那么mypet.bark()
将不起作用。并非所有动物都会吠叫mypet.eat(Food)
会起作用,因为所有动物都能吃。如果我想让我的宠物吠叫,因为我知道它现在是一只狗,那么我可以这么做((Dog)mypet)).bark(); // Will throw run-time error if mypet is not a Dog! // This is best to avoid, so just make mypet a Dog type if it must bark. // If you must make an Animal bark, use if (!(mypet instanceof Dog)) to handle the error propely.
上面的代码将检查
mypet
是否是狗,然后再让它吠叫这可以通过编写代码来实现
视频混合了对象和引用,因此我将使用以下代码使其更加明确
Dog a = new Dog(); b = a;
a
和b
在这个实例中都引用同一个对象。如果Dog
使用了大量内存,那么b = a
不会导致分配更多内存b.hasEaten(); // False a.eat(); b.hasEaten(); // True b = new Dog(); // Now they are different. a does not affect b
a.eat()
允许对象吃东西。内存中的位已更改:饥饿值已重置b.hasEaten()
检查a
吃东西时使用的同一只狗的饥饿值b = new Dog()
将它们分开,以便a
和b
引用不同的狗对象。它们将不再像以前那样结合在一起