Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过继承实例化_Java_Inheritance_Instantiation - Fatal编程技术网

Java 通过继承实例化

Java 通过继承实例化,java,inheritance,instantiation,Java,Inheritance,Instantiation,我知道这个代码是有效的,但为什么和如何是我的流行病。当我自己做数学(用笔和纸)时,它给了我80分。但当我阅读亚奥理事会的文件时,我注意到他们得出了相同的答案,但原因不同 “当程序运行时,main()方法将使用参数10和20调用C中的max()方法,因为“C”引用的实际对象属于C类。此方法将使用参数20和40调用B中的max()方法。B中的max()方法将依次使用参数20和40调用A中的max()方法。max()A中的方法将返回40到B中的max()方法。B中的max()方法将返回80到C中的ma

我知道这个代码是有效的,但为什么和如何是我的流行病。当我自己做数学(用笔和纸)时,它给了我80分。但当我阅读亚奥理事会的文件时,我注意到他们得出了相同的答案,但原因不同

“当程序运行时,main()方法将使用参数10和20调用C中的max()方法,因为“C”引用的实际对象属于C类。此方法将使用参数20和40调用B中的max()方法。B中的max()方法将依次使用参数20和40调用A中的max()方法。max()A中的方法将返回40到B中的max()方法。B中的max()方法将返回80到C中的max()方法。最后C的max()将返回80到main()中,main()将被打印出来。“


我听上去有点像希腊语,请帮忙。想知道写bc=newc()意味着什么吗;以及它与C=新C()的区别

如果你写
bc=newc()由于动态绑定,结果将是相同的。在运行时,对象类型将用于解析要调用的方法。c(
c
)的对象类型仍然相同,因此没有区别


代码中唯一的区别是,引用的类型已更改。

假设我们有
C=newc();B=c

构建了一个
C
对象,但您只能通过
B
看到它的
B
部分。就像不同的人对你的看法不同:例如,你的朋友把你当作朋友,而你的父母把你当作孩子,即使是同一个人(你是独一无二的,但人们对你的看法不同)。然后通过
b
与该对象交谈只允许与该对象的
b
视野交谈(仅在
b
中定义为公共的内容)。当然,这个对象是一个
C
对象,如果你对它使用
B
方法,那么它的
C
行为就是对它的回答。通过子类型化(外观通过包含相互关联),这被称为多态性(单个对象的不同外观)

下面是这种用法的一个实际例子。我猜想您同意
汽车
车辆
,正如
货车
车辆
。然后,当你建造一个停车场时,你不仅仅是为汽车而设计,而是为任何
车辆
,因为你可以停放
汽车
货车
。因此,将
汽车
货车
视为简单的
车辆
非常有用

在java中,这可以提供:

class VehicleThatCouldBeParked {}
class Car extends VehicleThatCouldBeParked {}
class Van extends VehicleThatCouldBeParked {}

...
VehicleThatCouldBeParked []parking = ne VehicleThatCouldBeParked[100]; // build a parking with hundred locations
...
Car myCar = new Car(); // some car
...
Van myVan = new Van(); // some van
...
parking[76] = myCar; // my car is parked in slot 77
parking[34] = myVan; // my van is parked in slot 35
...

这在许多情况下(甚至在现实生活中)非常重要,不需要了解对象的某些细节。

在运行时,将调用实际对象的方法

然而,区别取决于您的用法,其中可能有B定义行为和C,并且为了回答D,E和F可能以特定的方式实现它。现在使用B类型的引用,您可以为客户机创建一个公共合同

建议您阅读互联网上大量资源中的OOPs基本概念。

您所关注的问题是关于多态性的。如果变量(将其想象为框)指向类(我们称之为
A
),指向某个类,则可以将扩展
A
的任何类放入该框中

关于你进一步的问题,我建议你仔细阅读这篇文章:

A=新的C();a、 打印()

//a、 print1();无法解析方法print1()

//BB=新的C();不兼容类型


你自己的数学是什么?
bc=newc()vs
cc=newc()
max
的输出没有影响。请您也用code对您的问题进行适当的解释。
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");
    }
}