I know its via inheritance when we say B c = new C(); but what is the difference with C c = new C()
我知道这段代码有效,但我的流行病是为什么以及如何。当我做自己的数学运算(使用笔和纸)时,它给了我80.但是当我通读OCA论文时,我注意到他们得出了相同的答案,但出于不同的原因。
"当程序运行时,main()方法将使用参数10和20调用C中的max()方法,因为' c&#引用的实际对象39;这个方法将使用参数20和40调用B中的max()方法.B中的max()方法将依次使用参数20和40调用A中的max()方法。 A中的()方法将返回40到B中的max()方法.B中的max()方法将返回80到C中的max()方法。最后,C的max()将在main中返回80( )将打印出来。"
对我来说听起来或多或少是希腊语,请帮忙。想知道写B c = new C()的意思;以及它与C c = new C();
的区别答案 0 :(得分:0)
如果你写B c = new C();
,由于动态绑定,结果将是相同的。在运行时,对象类型将用于解析要调用的方法。 c(C
)的对象类型仍然相同,因此没有区别。
代码的唯一区别是,引用的类型已经改变。
答案 1 :(得分:0)
假设我们有C c = new C(); B b = c;
构建了C
个对象,但只能看到B
部分到b
。就像不同的人以不同的方式看待你一样:例如,你的朋友将你视为朋友,但你的父母将你视为一个孩子,即使它是同一个人(你是独一无二的,但人们会以不同的方式看待你)。然后,通过b
与此对象交谈,只允许与B
对此进行对话(仅B
中定义为公开的内容)。当然,对象是C
对象,那么如果你使用B
方法就会得到C
行为的答案。这被称为多态(单个对象的外观)子类型(外观通过包含相互关联)。
这种用法的真实例子如下。我想你同意Car
是Vehicule
而Van
是Vehicle
。然后,当你建造一个停车场时,你并没有为汽车设计它,而是设计Vehicle
,因为你可以停放Car
或Van
。因此,将<{>> {/ 1}}或Car
视为简单的Van
非常有用。
在java中,这可以给出:
Vehicle
这在许多情况下(即使在现实生活中)非常重要,不要了解对象的某些细节。
答案 2 :(得分:0)
在运行时,将调用实际对象的方法。
然而,差异取决于你的用法,你可能有B定义行为和C,为了回答D,E,E和F可能以特定的方式实现它。现在使用B类型的引用,您可以为客户创建一个通用合约。
建议从互联网上的大量资源中阅读基本的OOP概念。
答案 3 :(得分:0)
您关注的问题是多态性。如果你有一个变量(想象它是框)指向类(让我们称之为A
),指向某个类,你可以在这个框中放入任何扩展A
的类。 / p>
关于你的进一步问题,我建议仔细阅读帖子: Casting objects in Java
答案 4 :(得分:0)
abstract class A {
protected abstract void print();
}
class B extends A {
@Override
protected void print() {
System.out.println("I am in B");
}
public void print1() {
System.out.println("No in A");
}
}
class C extends A {
@Override
protected void print() {
System.out.println("I am in C");
}
public void print1() {
System.out.println("No in A");
}
}
a a = new C(); a.print();
//一个的 PRINT1 强>();无法解决方法print1()
// B b =新C();不兼容的类型