通过继承实例化

时间:2017-02-17 06:07:03

标签: java inheritance instantiation

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();

的区别

5 个答案:

答案 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行为的答案。这被称为多态(单个对象的外观子类型(外观通过包含相互关联)。

这种用法的真实例子如下。我想你同意CarVehiculeVanVehicle。然后,当你建造一个停车场时,你并没有为汽车设计它,而是设计Vehicle,因为你可以停放CarVan。因此,将<{>> {/ 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();不兼容的类型