Java 通过继承实例化
我知道这个代码是有效的,但为什么和如何是我的流行病。当我自己做数学(用笔和纸)时,它给了我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()将被打印出来。“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
我听上去有点像希腊语,请帮忙。想知道写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()代码>vscc=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");
}
}